Sunday, 15 September 2013

ios - Error when saving PFQuery result -



ios - Error when saving PFQuery result -

i have item viewcontroller button create chatroom owner of item.

-(void)createchatroom { pfquery *queryforchatroom = [pfquery querywithclassname:@"chatroom"]; [queryforchatroom wherekey:@"user1" equalto:[pfuser currentuser]]; [queryforchatroom wherekey:@"user2" equalto:self.item.owner]; pfquery *queryforchatroominverse = [pfquery querywithclassname:@"chatroom"]; [queryforchatroominverse wherekey:@"user1" equalto:self.item.owner]; [queryforchatroominverse wherekey:@"user2" equalto:[pfuser currentuser]]; pfquery *combinedchatroomquery = [pfquery orquerywithsubqueries:@[queryforchatroom, queryforchatroominverse]]; [combinedchatroomquery findobjectsinbackgroundwithblock:^(nsarray *objects, nserror *error) { if ([objects count] == 0){ pfchatroom *chatroom = [pfchatroom objectwithclassname:@"chatroom"]; [chatroom setobject:[pfuser currentuser] forkey:@"user1"]; [chatroom setobject:self.item.owner forkey:@"user2"]; [chatroom saveinbackgroundwithblock:^(bool succeeded, nserror *error) { [self performseguewithidentifier:@"itemtochatsegue" sender:nil]; }]; } }]; }

when press button execute code error occurring on thread 3, 4, 14, 34 on given run.

[pfuser(private) checksaveparams]

i can log console both [pfuser currentuser] , viewcontroller's item.owner, there objects work with. , if seek code without sec user, can in fact save parse chatroom object [pfuser currentuser] attached it.

what need able add together non-current user chatroom?

for security reasons, parse won't allow sec user modified current user. if want able create changes sec user, need utilize cloud code around roadblock.

i have had multiple problems before, , every time i've been forced utilize workaround via cloud code.

here's illustration of workaround did creating friends relationship between 2 users:

[pfcloud callfunction:@"edituser" withparameters:@{@"userid": user.objectid}];

the above code statement in xcode, , executes function have added cloud code file.

then, here's cloud code file looks like:

parse.cloud.define('edituser', function(request, response) { var userid = request.params.userid; var user = parse.object.extend('_user'), user = new user({ objectid: userid }); var currentuser = request.user; var relation = user.relation("friendsrelation"); relation.add(currentuser); parse.cloud.usemasterkey(); user.save().then(function(user) { response.success(user); }, function(error) { response.error(error) }); });

the above code uses master key save changes both logged in user, , user who's objectid passed function.

code details:

var relation

this variable i'm creating hold next fucntion returns:

user.relation("friendsrelation");

in above function, "friendsrelation" name of pfrelation key in parse.

now have valid relation object contain in our variable called relation, execute function argument of our currentuser object.

after that, that's left saving everything. don't programme javascript, still able come above solution looking @ parse cloud code docs, , searching around on back upwards forums.

if take template above, , create little changes based on type of parse objects working e.g. chatroom, should able accomplish need. have jump through these hoops because parse sdk doesn't want situation can login , somehow create changes user's account, whether own fault or developer's mistake.

ios objective-c cocoa-touch parse.com subclass

No comments:

Post a Comment