如何从存储在 Parse 列中的数组中删除对象
Posted
技术标签:
【中文标题】如何从存储在 Parse 列中的数组中删除对象【英文标题】:How to delete objects from an array stored in Parse column 【发布时间】:2015-08-12 13:46:54 【问题描述】:所以,我在 Parse.com 中创建了一个名为 Posts
的类。这是类 Posts
的图像
在这里您可以在objectId
列中看到所有Posts
的objectId,在likes
列中我正在保存喜欢该帖子的用户的ObjectId.. 所以基本上如果用户点击与按钮不同,当前用户的 ID 应该被删除。这是我当前的代码:
var query:PFQuery = PFQuery(className: "Posts")
query.whereKey("objectId", equalTo: postData.objectId!)
query.whereKey("likes", equalTo: PFUser.currentUser()!.objectId!)
query.findObjectsInBackgroundWithBlock( (objects, error) -> Void in
if let objects = objects
for object in objects
object.deleteInBackground()
)
但它会删除整行而不是当前用户的用户ID..
【问题讨论】:
考虑关系是否更适合此要求 【参考方案1】:您可以使用removeObject:forKey:
仅从数组中删除该单个对象。完成此操作后,调用saveInBackground
将更改保存回服务器。
另请参阅:https://www.parse.com/docs/ios/guide#objects-arrays
【讨论】:
【参考方案2】:我相信您将 userID 作为字符串而不是指针存储在您的 likes 数组中。
在您的代码中,键“likes”是一个数组类型,但是您要查询一个字符串类型的objectId,显然解析不会找到任何与此查询匹配的列。
所以在你的情况下,你想删除你喜欢数组中的一个字符串(目标 c 代码)
PFQuery *query = [PFQuery queryWithClassName@"Posts"];
[query whereKey:@"objectId" equalTo:postData.objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *object, NSError *error)
if (! error)
//get the post object, index 0 because each post has 1 unique ID
PFObject *thisObject = [object objectAtIndex:0];
//get the likes array
NSMutableArray *array = [[NSMutableArray alloc]initWithArray:thisObject[@"likes"]];
[array removeObject:/* your user id*/];
//save the new array
[thisObject setObject:array forKey:@"likes"];
[thisObject saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
if (succeeded)
//success
];
];
【讨论】:
【参考方案3】:我已经使用您的方法从另一个用户的朋友列表中删除了用户 objectID,而是将其添加到用户阻止的朋友列表中,两者都在解析时的数组中。谢谢
let cell = tableView.cellForRow(at: indexPath) as! cell
let theUsersID = cell.theObjectID.text!
PFUser.current()?.addUniqueObjects(from: [theUsersID], forKey: "friendList")
PFUser.current()?.saveInBackground()
PFUser.current()?.removeObjects(in: [theUsersID], forKey: "blockFriend")
PFUser.current()?.saveInBackground()
self.usernames.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
【讨论】:
以上是关于如何从存储在 Parse 列中的数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章