从Parse.com(iOS应用程序)数据库中删除项目

从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”,直到订阅者不接受该请求为止 现在我可以做我能做的一切: 注册这两个的用户

我正在为我的iOS应用程序8使用Parse.com。。。 在parse数据库中,我创建了一个名为“Relationships”的新类,我试图做的是为我的应用程序的用户添加前缀,以便向其他用户发送好友请求。我没有使用PFRelation,因为我需要朋友请求不是自动的,而是被用户接受的

简而言之,用户发送请求richeista of friendsity,该请求保持在类“Relationship”中,状态为“Waiting”,直到订阅者不接受该请求为止

现在我可以做我能做的一切:

  • 注册这两个的用户指针(接收者和转发器的朋友请求)
  • 插入请求状态“待定”
我的问题是,如果我的用户不想要更多“发送请求无法”删除

我尝试使用[“PFObject的名称”deleteInBackground],但我无法删除任何内容

你能帮我弄清楚如何从数据库中删除新创建的数据进行解析吗

#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){};。所以在块中,如果成功,则向用户显示警报。