2014-12-10 1 views
1

PFRelations를 사용하여 PFUser와 일부 PFObject 사이에 양방향 관계를 만들려고합니다.PFUser와 PFObject 간의 양방향 관계를 만드는 일관되지 않은 결과

먼저 게시글을 만들어 배경에 저장합니다. 그리고 완료 블록에서 이미이 사용자와 관련이있는 게시물 목록에 추가하여 PFUser에 새 게시를 추가하고 동기 저장 호출로 사용자를 다시 저장합니다.

게시는 사용자와의 올바른 관계로 항상 올바르게 저장되지만 사용자의 게시와의 관계는 간헐적으로 만 작동합니다. 코드를 밟으면 매번 올바른 결과가 나오기 때문에 어떤 종류의 경쟁 조건이라고 믿게됩니다. 이 문제는 무엇이 발생합니까? 원하는 관계를 성취 할 수있는 더 좋은 방법이 있습니까?

PFUser *currentUser = [PFUser currentUser]; 
PFObject *posting = [PFObject objectWithClassName:@"Postings"]; 
__weak HLReviewPostItemViewController *myself = self; 

posting[@"title"] = self.createdItem[@"title"]; 
posting[@"price"] = self.createdItem[@"price"]; 

posting[@"owner"] = currentUser; 

[posting saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
    if (!error) { 
     PFGeoPoint *currentGeoPoint = [myself.locationManager getCurrentGeoPoint]; 
     [currentUser setObject:currentGeoPoint forKey:@"geoPoint"]; 

     PFRelation *postingsForUser = [currentUser relationForKey:@"postings"]; 
     [postingsForUser addObject:posting]; 

     NSError *error; 
     [currentUser save:&error]; 
     if (!error) { 
      [myself.dataManager fetchLocalUsers]; 
     } else { 
       NSLog(@"Error saving Posting in user relation: %@", error); 
     } 
    } else { 
     NSLog(@"Error saving Posting: %@", error); 
    } 
}]; 
+0

이 코드는 [afterSave] (https://parse.com/docs/cloud_code_guide#functions-aftersave) 액션으로 클라우드 코드로 구현 될 수 있습니다. 글이 저장되면 현재 사용자를 얻고 글의 관계를 글에 추가하십시오. – rickerbh

+0

물론입니다.하지만이 방법이 유효한 접근 방법 인 것 같아서 왜 이것이 완전히 성공하지 못했는 지 궁금합니다. 나는 또한 덜 움직이는 부분을 갖고 싶습니다 - 당분간 구름 코드를 피하십시오. – PFaunik

답변

0

postingowner를 저장하는 컬럼을 가지고 있기 때문에 당신의 posting을 저장


는 소유자 - 부모도 자동으로 저장됩니다 - 구문 분석의 아주 좋은 기능.

코드를 단계별 실행하면 자동 저장이 실행되고 다음에 다시 저장되기 전에 완료됩니다. 그러나 코드를 실행할 때 PFUser 개체에 저장하는 것이 가장 먼저 발생한다는 보장은 없습니다.

관련 문제