保存用户会导致错误:找不到更新对象(代码:101,版本:1.2.19)
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
if (!error) {
[PFUser currentUser].location = geoPoint;
[[PFUser currentUser] save];
}
}];
我做错了什么?
http post request https://api.parse.com/2/update
{
"iid": "[redacted]",
"classname": "_User",
"data": {
"email": "test@test.com",
"objectId": "[redacted]"
},
"session_token": "[redacted]",
"v": "i1.2.19",
"uuid": "[redacted]"
}
响应
{
"code": 101,
"error": "object not found for update"
}
答案 0 :(得分:1)
我和你有同样的问题,我做了一些测试并找出根本原因:
工作ACL,我为*做了修改以使其清楚
ACL失败。
正如您可以看到写入权限锁定到用户“6iIv5XWZvM”,这就是为什么您的更新将“找不到对象”
您可以将数据记录直接更改为“*”,以使您的更新正常运行。
OK!以下是解决方案:
更改每条记录“ACL”数据col,如下所示:
{“*”:{“write”:true,“read”:true}}
您需要以特定用户身份登录PFUSer才能将ACL更改为public。对于我的情况,使用objectId将是“6iIv5XWZvM”。我需要设置密码和登录信息,并使用代码登录和修改它。详细介绍iOS代码如下:
//iOS Sample
[PFUser logInWithUsernameInBackground:@"USERNAME" password:@"PASSWORD" block:^(PFUser *user, NSError *error) {
if (user) {
PFQuery *query = [PFQuery queryWithClassName:CLASS_NAME];
[query findObjectsInBackgroundWithBlock:^(NSArray *objs, NSError *error) {
for (PFObject *obj in objs) {
PFACL *defaultACL = [PFACL ACL];
[defaultACL setPublicReadAccess:YES];
[defaultACL setPublicWriteAccess:YES];
[obj setACL:defaultACL];
[obj saveInBackground];
}
}];
} else {
// The login failed. Check error to see why.
}
}];
但是,请记住在保存新数据之前添加以下设置,如果您不想再发生这种情况(注意:这将是安全问题)
//It is iOS code sample.
PFACL *defaultACL = [PFACL ACL];
[defaultACL setPublicReadAccess:YES];
[defaultACL setPublicWriteAccess:YES];
[PFACL setDefaultACL:defaultACL withAccessForCurrentUser:YES];
答案 1 :(得分:0)
试试这个,我正在使用它,当我需要为当前用户保存对象时。希望它会有所帮助。
PFUser *user = [PFUser currentUser];
[user setObject:geoPoint forKey:@"location"];
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (error){
NSLog(@"Error %@ %@", error, [error userInfo]);
}
}];
答案 2 :(得分:0)
当您尝试保存用户没有ACL访问权限的对象时,会附加错误:“找不到更新的对象”。
为了让用户更改对象,您需要在创建对象时设置PFACL权限:
对于特定用户:
PFObject *object = /*the object you want to save*/
NSString *userID = /*the objectID of the user you want to let perform modifications later*/
PFACL *groupACL = [PFACL ACL];
[groupACL setWriteAccess:YES forUserId:userID];
object.ACL = groupACL;
对于所有用户:
PFObject *object = /*the object you want to save*/
NSString *userID = /*the objectID of the user you want to let perform modifications later*/
PFACL *groupACL = [PFACL ACL];
[groupACL setPublicWriteAccess:YES];
object.ACL = groupACL;