代码之家  ›  专栏  ›  技术社区  ›  kAiN

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

  •  0
  • kAiN  · 技术社区  · 10 年前

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

    简而言之,用户发送请求richeista of friendship,这将保持在状态为“Waiting”的类“Relationship”中,直到用户不接受该请求。

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

    • 用于注册这两个的用户指针(接收者和转发者的好友请求)
    • 插入请求状态“待定”

    我的问题是,如果我的用户不想要更多的“发送请求无法”删除。。

    我尝试使用[“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;
    }
    

    enter image description here

    2 回复  |  直到 10 年前
        1
  •  1
  •   nikhil84    10 年前

    这里有一个从解析中删除对象的方法。

    -(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即可。

        2
  •  0
  •   kAiN    10 年前
    -(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];
    
        }
    
    }
    

    您好,Walle再次感谢您的帮助,您非常友好和乐于助人。。。

    我用这种方式修复了它,它似乎奏效了。。。

    唯一的问题是它没有立即更新数据,因此用户无法确定您是否发送了请求。仅当表视图刷新表视图或更改视图控制器时,才会更新表视图。。

    当用户发送好友请求时,我尝试再次重做查询,但数据重叠,并减慢了应用程序的速度。。。如何在不调用查询的情况下每分钟刷新一次数据?

    选择按钮或不选择淀粉的想法会好吗?我在尝试,但可能出了问题,因为我无法让它发挥作用