保存从查询中提取的用户的属性(即不在currentUser上)

我有兴趣根据currentUser执行的操作将属性保存到数据库中的用户。 基于下面的代码,我得到错误消息“用户不能被保存,除非他们已经通过login或注册validation”

 NSString *IDToFetch = @"some_id"; PFQuery *query = [PFUser query]; [query whereKey:@"user_id" equalTo:IDToFetch]; PFUser *foundUser = (PFUser *)[query getFirstObject]; foundUser[@"new_column"] = @"Some text"; [foundUser saveEventually]; //here an exception is thrown 

我想知道是否有一个解决这个问题,我可以保存属性foundUser用户,而不必login该用户。 谢谢你的帮助!

如果要更新当前不是当前login用户的用户,则需要使用master-key调用Parse。

例如,您可以从CloudCode执行此操作;

 Parse.Cloud.define('editUser', function(request, response) { var userId = request.params.userId, newColText = request.params.newColText; var User = Parse.Object.extend('_User'), user = new User({ objectId: userId }); user.set('new_col', newColText); Parse.Cloud.useMasterKey(); user.save().then(function(user) { response.success(user); }, function(error) { response.error(error) }); }); 

并从你的iOS项目调用它;

 [PFCloud callFunction:@"editUser" withParameters:@{ @"userId": @"someuseridhere", @"newColText": @"new text!" }]; 

确定提供这个答案,但基本上不build议! 我认为在一天结束的时候,云代码路线更清洁。 但是,这可以说更容易..

您可以创build另一个与每个用户配对的表。

例如。

表名

user_extra_details

领域

用户

得分了

所以其他用户可以在user_extra_details上编辑这个特定的字段

但是,如果您怀疑这可能导致大量额外的查询,但这不是不可能的,只是…不方便。 因此,您将如何访问您设置的数据。

 PFQuery *userQuery = [PFQuery queryWithTable:@"Users"]; [userQuery whereKey:Some Key equalTo:some value]; PFQuery *userDetails [PFQuery queryWithTable:@"user_extra_details"]; [userDetails whereKey:@"User" inQuery:userQuery]; [userDetails includeKey:@"User"]; [userDetails fetch]; 

你不得不刁钻的是,重复的细节对象显然会创build多个结果。 所以我build议做一个删除并插入vs做更新的extra_detail对象,以帮助打击任何错误的重复。