2014-02-06 1 views
0

그래서 내 구문 호출을 DBManager 개체에서 분리하려고합니다. 다음은 내 통화 중 하나입니다.블록을 통과하여 DB 논리 분리

- (void)createMessageObject:(NSString*)text forConversation:(PFObject*)conversationObject withBlock:(PFBooleanResultBlock)block { 

    ///////////////////////////////// 
    // First create the object 
    PFObject* messageObject = [PFObject objectWithClassName:kWSMessageClassKey]; 
    [messageObject addObject:[PFUser currentUser] forKey:kWSMessageUserKey]; 
    [messageObject addObject:text forKey:kWSMessageTextKey]; 
    [messageObject addObject:[[WSWordlistManager shared] languageTarget] forKey:KWSMessageLanguageKey]; 


    [messageObject saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     if (succeeded) { 

      /////////////////////////////// 
      // Now add it to the Conversation object 
      [conversationObject addObject:messageObject forKey:kWSConversationMessagesKey]; 
      [conversationObject saveInBackgroundWithBlock:block]; 

     } 
    }]; 
} 

지금은 인앱 채팅/메시징 기능을 사용하고 있습니다. 따라서 위의 호출에서 새 Message 개체를 만들고이를 성공적으로 저장하면 기존 Conversation 개체에 추가합니다. 문제는 내 ViewController에서의 원래 호출에 있습니다.

[self createMessageObject:text forConversation:self.conversation withBlock:^(BOOL succeeded, NSError *error) { 

     if (succeeded) { 

      // PROBLEM HERE: HOW TO PASS BACK THE messageObject I CREATED IN THE DB CALL? 
      [self.objects addObject:messageObject]; 

      [self.messages addObject:[[JSMessage alloc] initWithText:text sender:sender date:date]]; 
      [self finishSend];     
      [self sendMessagePushFromUser:[PFUser currentUser] toUsers:self.friends messageObject:messageObject];     
      [self scrollToBottomAnimated:YES]; 

     } 

    }]; 

그래서 제가 문제라고 생각하는 라인에 문제가 있습니다. Parse 호출에서 작성한 messageObject에 액세스해야하지만이를 다시 전달하는 방법은 무엇입니까?

+0

확인이 링크 http://stackoverflow.com/questions/21613642/how-do-i-change-objects-value - 매개 변수 - 내부 - 블록 – Pawan

답변

0

콜백을 사용할 수 있습니다. 이런 식으로 뭔가 :이 같은

- (void)createMessageObject:(NSString*)text forConversation:(PFObject*)conversationObject withCallback:(void(^)(PFObject *messageObject))callback { 
    ///////////////////////////////// 
    // First create the object 
    PFObject* messageObject = [PFObject objectWithClassName:kWSMessageClassKey]; 
    [messageObject addObject:[PFUser currentUser] forKey:kWSMessageUserKey]; 
    [messageObject addObject:text forKey:kWSMessageTextKey]; 
    [messageObject addObject:[[WSWordlistManager shared] languageTarget] forKey:KWSMessageLanguageKey]; 


    [messageObject saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     if (succeeded) { 
      if (callback) { 
       callback(messageObject); 
      } 

     } 
    }]; 
} 

그리고 다음을 호출

[self createMessageObject:text forConversation:self.conversation withCallback:^(PFObject *messageObject) { 
    NSLog(@"Text from message object: %@", [messageObject objectForKey:kWSMessageTextKey]); 

    [self.objects addObject:messageObject]; 

    [self.messages addObject:[[JSMessage alloc] initWithText:text sender:sender date:date]]; 
    [self finishSend]; 
    [self sendMessagePushFromUser:[PFUser currentUser] toUsers:self.friends messageObject:messageObject]; 
    [self scrollToBottomAnimated:YES]; 
}]; 
관련 문제