0

나는 하나의 엔티티가 "대화"라고하고 다른 하나의 "메시지"가있는 간단한 Coredata 모델을 가지고 있습니다. 기본적으로, 나는 아이폰 SMS 응용 프로그램을 재생산해야합니다.끊임없이 업데이트되는 관계에있는 객체에 대해 FetchedResultsController를 사용해야합니까?

저는 메시지에서 대화로, 대화에서 메시지로의 to-many 관계가 있습니다.

언제든지 내 앱을 실행하면 모든 대화가 내 fetchedResultsController에로드됩니다. 내가 Coredata가 어떻게 작동하는지 정확하게 이해한다면, 나는 관계를 맺을 때마다 대화에 링크 된 모든 메시지도 올바르게로드 될 것입니다. 나는 모든 대화를 동시에로드하지 않도록 배치 크기를 설정했습니다.

내 앱이 길게 당기는 요청을 통해 서버에 연결되어 있으므로 언제든지 서버에서 메시지를받을 수 있습니다 (coredata에 추가 된 다음 NSNotification을 사용하여 내 뷰에 추가 할 내용을 알려줍니다).

내 문제는 다음과 같습니다. 행을 선택하면 스택에 다른보기가 표시되어 내 메시지를 볼 수 있습니다. 그 이유를 알고 싶습니다. 이유는 다음과 같습니다.

• 관계를 통해 제공되는 NSSet 메시지를 내보기에 전달할 수 있습니까? 그러나, 그보기를 보는 동안 메시지를받을 수있는, 내가보기에 전달 된 NSSet을 새로 고치려면 어떻게해야합니까?

해당 뷰에서 다른 fetchedresultController를 사용할 수도 있지만이 경우 이전 뷰에서 모든 메시지를 이유없이 미리로드 할 수 있습니까? 내가 이전에 볼 수 없도록 코어 데이터를로드 할 수 있습니까?

이 내용이 충분히 분명 해졌기를 바랍니다. 나는 절망적이고 그 웹 사이트에 전문가가 있다는 것을 알고있다. 필요한 정보가 있으면 알려주세요. 최대한 빨리 정보를 제공해 드리겠습니다. 내가 제대로 이해하면 내가 관계를 가지고

+0

규칙에 따라 엔티티 이름은 대문자로 시작하고 속성 및 관계 이름은 소문자로 시작합니다. 다른 사람들이 읽고 이해하기 쉽게하기 때문에 코드와 게시물 모두에서 해당 규칙을 따라야합니다. – TechZen

답변

5

Coredata는 작품, 내 대화 에 연결된 모든 메시지는 바로뿐만 아니라로드되는 방법?

Message 개체 자체는 사용자가 관계를 쿼리 할 때까지로드되지 않습니다. 그때까지 그들은 단지 오류가 많습니다 (유령 자리 표시 자).

일반적으로 사용자가 첫 번째 표에서 선택한 Conversation 개체 만 전달하면됩니다. 두 번째 tableview 컨트롤러에서 다음 해당 메시지에 대해 Conversation 개체를 요청할 것입니다. 그런 다음 배열을 정렬하여 표시 할 수 있습니다. 당신이 messages 관계는 끊임없이 새로운 Message 객체로 업데이트되고있는 상황이있는 경우

그러나, 당신은 당신이 새로 업데이트 된 Message 개체의 모든 자동 알림을받을 이유만으로 NSFetchedResultsController (FRC)를 사용 할 수 있습니다.

이 작업을 수행하려면 위와 같이 Conversation 개체를 전달하고 그래서 같이 FRC의 조건에서 사용할 것 :

NSPredicate *p=[NSPredicate predicateWithFormat:@"conversation==%@",passedConversationObject]; 

그런 다음 평소처럼 FRC의 대리자 메서드를 구현합니다.

물론 두 번째 tableview 컨트롤러를 문맥에서 NSManagedObjectContextObjectsDidChangeNotification에 등록하면이 모든 것을 직접 처리 할 수 ​​있지만 초보자에게는 FRC가 더 쉬울 수 있습니다.

+0

이 명확한 대답은 대단히 감사합니다. 나는 coredata가 자동으로 게으른 로딩을하고 있다는 것을 몰랐습니다. 저건 완벽 해 ! 고맙습니다. 올바르게 작동 할 것입니다. (당신이 말한 것에 의심의 여지가 없지만 구현했습니다.) 다시 고맙습니다. – Pierre

+0

감사합니다. :) –

관련 문제