2014-09-18 5 views
0

iOS 응용 프로그램 8에 Parse.com을 사용하고 있습니다 ... 구문 분석 데이터베이스에서 "Relationships"라는 새로운 클래스를 만들었습니다. 해야 할 일은 다른 사용자에게 친구 요청을 보내기 위해 내 앱의 사용자를 접두사로 사용하는 것입니다. 나는 친구 요청이 자동이 아니고 사용자가 받아 들일 필요가 있기 때문에 PFRelation을 사용하지 않습니다.Parse.com (iOS App) 데이터베이스에서 항목 삭제

요약하면 사용자는 우정에 대한 요청을 보내고 가입자는 요청을 수락하지 않을 때까지 상태 "대기 중"인 클래스 "관계"에 남아 있습니다.

지금 내가 할 수있는 모든 것을 할 수 있어요 : 두 (수신기와 전달자의 친구 요청)

  • 요청 상태를 삽입을 등록

    • 사용자 포인터를

    "보류" 내 문제는 내 사용자가 더 원하지 않는 경우 '요청을 보낼 수 없습니다'삭제할 수 있습니다 ..

    [ "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

  • +0

    삭제 논리는 어디에 있습니까? 또한 정확히 어떤 사용자가 삭제 하시겠습니까? – nikhil84

    +0

    사용자는 마지막으로 보낸 친구 요청을 삭제할 수 있어야합니다 .. 우정을 요청한 사용자에게 방금 제출 한 요청을 취소 할 수있는 몇 가지 단어가 있습니다 – kAiN

    답변

    0
    -(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 덕분에 다시 도움을 당신은 매우 친절하고 도움이되었습니다 ...

    내가 이런 식으로 고정하고 작동하는 것 같다 ...

    남아있는 유일한 문제 데이터를 즉시 업데이트하지 않아 사용자가 요청을 보낸 지 여부를 알 수 없기 때문입니다. tableview를 새로 고치거나 뷰 컨트롤러를 변경하는 경우에만 tableview가 업데이트됩니다.

    사용자가 친구 요청을 보내지 만 데이터가 겹치고 앱이 느려지 자마자 다시 쿼리를 다시 시도했습니다 ... 어떻게 할 수 있습니까? 쿼리를 호출하지 않고 매분마다 데이터를 새로 고칩니다.

    버튼을 선택했거나 녹말이 아닌 아이디어가 좋을까요?노력하고 있지만 어쩌면 뭔가 잘못 됐어.

    +0

    saveInBackground 메소드가 동기화 호출을하므로 ** [userObj saveInBackgroundWithBlock :^(BOOL succeed, NSError * error) { }]; **을 사용하십시오. 따라서 성공하면 블록에 사용자에게 경고를 표시합니다. – nikhil84

    1

    가하는 방법입니다 요청 구문 분석에서 개체를 삭제합니다.

    -(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 [email protected]"Id"; 
        NSString *sender_idStr [email protected]"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]); 
        } 
        }]; 
    } 
    

    이렇게하면 요청 개체를 구문 분석에서 삭제할 수 있습니다. 또한 요청을 보낸 사용자가 요청을 취소 한 다음 해당 요청 개체를 검색하고 u 요청을받은 사용자의 다른 사용자가 해당 UI에서 요청을 제거하도록 푸시 할 수있는 것과 동일한 작업을 수행합니다.

    삭제 요청을받은 사용자는 단순히 요청 개체를 찾아서 보낸 사람과받는 사람 모두에게 UI를 삭제하고 업데이트합니다.

    +0

    Walle 안녕하십니까, 실제로 추론 의이 라인에서 작동하려고했는데, 문제는 내가 username 필드에 databrowser가 아니라 두 포인터에 대한 링크입니다.이 경우 어떻게 할 수 있습니까? databrowser 클래스 "관계"를 보여 드리겠습니다. 상단의 게시물에 그림을 첨부했습니다. – kAiN

    +0

    코드를 업데이트하여 보았습니다. – nikhil84

    +1

    감사 Walle 당신은 아름답습니다! – kAiN

    관련 문제