从Parse.com(iOS应用程序)数据库中删除项目
我正在为我的iOS应用程序8使用Parse.com。。。 在parse数据库中,我创建了一个名为“Relationships”的新类,我试图做的是为我的应用程序的用户添加前缀,以便向其他用户发送好友请求。我没有使用PFRelation,因为我需要朋友请求不是自动的,而是被用户接受的 简而言之,用户发送请求richeista of friendsity,该请求保持在类“Relationship”中,状态为“Waiting”,直到订阅者不接受该请求为止 现在我可以做我能做的一切:从Parse.com(iOS应用程序)数据库中删除项目,ios,parse-platform,relationship,delete-row,Ios,Parse Platform,Relationship,Delete Row,我正在为我的iOS应用程序8使用Parse.com。。。 在parse数据库中,我创建了一个名为“Relationships”的新类,我试图做的是为我的应用程序的用户添加前缀,以便向其他用户发送好友请求。我没有使用PFRelation,因为我需要朋友请求不是自动的,而是被用户接受的 简而言之,用户发送请求richeista of friendsity,该请求保持在类“Relationship”中,状态为“Waiting”,直到订阅者不接受该请求为止 现在我可以做我能做的一切: 注册这两个的用户
- 注册这两个的用户指针(接收者和转发器的朋友请求)
- 插入请求状态“待定”
#pragma mark ADD FRIENDS
-(void)addFriendUserButtonPressed:(UITableViewCell *)customCell {
NSIndexPath *indexPath = [self.tableViewFindUser indexPathForCell:customCell];
PFObject *richiesta = [PFObject objectWithClassName:@"Relation"];
if (!isFiltered) {
PFUser *userFiltered = [self.userArray objectAtIndex:indexPath.row];
if (![self Is_InAttesa:userFiltered]) {
[richiesta setObject:userFiltered forKey:@"To_User"];
[richiesta setObject:[PFUser currentUser] forKey:@"From_User"];
[richiesta setObject:@"Pending" forKey:@"STATUS"];
[richiesta saveInBackground];
} else {
//[richiesta removeObject:[PFUser currentUser] forKey:@"From_User"];
//[richiesta setObject:userFiltered forKey:@"STATUS"];
//[richiesta saveInBackground];
}
}
else {
PFUser *userNotFiltered = [self.userFiltrati objectAtIndex:indexPath.row];
[richiesta setObject:userNotFiltered forKey:@"To_User"];
[richiesta setObject:[PFUser currentUser] forKey:@"From_User"];
[richiesta setObject:@"Pending" forKey:@"STATUS"];
[richiesta saveInBackground];
}
}
这是我创建的布尔方法,用于识别(通过查询)用户是否在挂起的好友请求列表中
-(BOOL)Is_InAttesa:(PFUser *)user_inattesa {
for (PFUser *userInAttesa in amiciInAttesaMutableArray) {
if ([[[userInAttesa objectForKey:@"To_User"]objectId] isEqualToString:user_inattesa.objectId]) {
return YES;
}
}
return NO;
}
以下是一种从解析中删除对象的方法
-(void)deleteButton {
//Query or retrieving data from dB which you want to delete.
PFQuery *query = [PFQuery queryWithClassName:@"YOUR_CLASS"];
//This string in below case takes name from textfield that user wants to delete. For your case you could modify it as per your need.
NSString *receiver_idStr =@"Id";
NSString *sender_idStr =@"Id";
// below two queries will work as like SELECT * FROM someTable WHERE senderId = 'id' AND receiverId = 'id'
[query whereKey:@"request_sender_id" containsString:sender_idStr];
[query whereKey:@"request_receiver_id" containsString:receiver_idStr];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { //Query fired in background to search in parse for this object with condition provided.
if (!error) {
NSLog(@"Successfully retrieved: %@", objects);
//Now as you got object then you will type cast object from NSArray to PFObject and perform deleteInBackground method on them.
//Also update that UI part ,i.e., remove the request object from UI.
}
else {
NSLog(@"Error: %@", [error localizedDescription]);
}
}];
}
因此,这种方法将能够从解析中删除请求对象。另外,当发送请求的用户取消请求时,您还可以搜索该请求对象,并在接收请求的用户的其他位置执行相同的操作,您可以推送通知以从其UI中删除该请求
若用户收到请求删除,那个么只需查找请求对象并删除,以及更新发送方和接收方的UI
-(void)addFriendUserButtonPressed:(UITableViewCell *)customCell {
NSIndexPath *indexPath = [self.tableViewFindUser indexPathForCell:customCell];
PFObject *richiesta = [PFObject objectWithClassName:NPFriendClass];
if (!isFiltered) {
PFUser *userFiltered = [self.userArray objectAtIndex:indexPath.row];
if (![self Is_InAttesa:userFiltered]) {
[richiesta setObject:userFiltered forKey:NPFriend_AUser];
[richiesta setObject:userFiltered.objectId forKey:@"OBJECT_USER_ID"];
[richiesta setObject:userFiltered.username forKey:@"Username"];
[richiesta setObject:[PFUser currentUser] forKey:NPFriend_DaUser];
[richiesta setObject:@"Richiesta In Attesa" forKey:NPFriendRequestStatus];
[richiesta saveInBackground];
} else {
PFQuery *query = [PFQuery queryWithClassName:NPFriendClass];
[query whereKey:NPFriend_DaUser equalTo:[PFUser currentUser]];
[query whereKey:NPFriendRequestStatus equalTo:@"Richiesta In Attesa"];
[query whereKey:@"OBJECT_USER_ID" equalTo:userFiltered.objectId];
[query includeKey:NPFriend_AUser];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error) {
for (PFObject *object in objects) {
NSLog(@"Successfully retrieved: %@", object);
[object deleteInBackground];
}
}
else {
NSLog(@"Error: %@", [error localizedDescription]);
}
}];
}
}
else {
PFUser *userNotFiltered = [self.userFiltrati objectAtIndex:indexPath.row];
[richiesta setObject:userNotFiltered forKey:NPFriend_AUser];
[richiesta setObject:[PFUser currentUser] forKey:NPFriend_DaUser];
[richiesta setObject:@"Richiesta In Attesa" forKey:NPFriendRequestStatus];
[richiesta saveInBackground];
}
}
你好,沃勒再次感谢你的帮助你一直都很善良,很有帮助
我用这种方式修复了它,它似乎起了作用
剩下的唯一问题是它不会立即更新数据,因此用户无法确定您是否发送了请求。仅当tableview刷新tableview或更改viewcontroller时,才会更新tableview
当用户发送好友请求时,我尝试重新执行查询,但数据重叠并减慢了应用程序的速度。。。如何在不调用查询的情况下每分钟刷新一次数据
选择按钮与否的想法可能是好的?我正在尝试,但可能是出了问题,因为我无法让它工作您的删除逻辑在哪里?还有,用户到底想删除什么?用户应该能够删除上次发送的好友请求。。几句话我希望用户(请求友谊的用户)可以选择取消您刚刚提交的请求Alle Hello并感谢您的回答,事实上我正试图进行这方面的推理,问题是我在用户名字段中没有databrowser,而是指向两个指针的链接。。在这种情况下,我怎么办?我将向您展示我在topsaveInBackground方法中贴出的图片中的databrowser类“Relations”,因此使用[userObj saveInBackgroundWithBlock:^(BOOL success,NSError*error){};。所以在块中,如果成功,则向用户显示警报。