NSManagedObjects를보고, 편집하고, 만들 때 NSManagedObjectContexts를 사용하는 적절한 방법을 알아 내려고하고 있습니다. 설명서 및 예제에서는 가장 기본적인 경우에 설명서를 사용하는 방법을 설명했지만 약간 복잡한 설정에서는 적절한 방법이 무엇인지 잘 모르겠습니다.새 객체 (iPhone)를 편집/생성 할 때 NSManagedObjectContexts의 올바른 사용법은 무엇입니까?
셋업 :
- 3 메인 화면 : 객체의 목록, 편집 객체 화면, 새로운 객체 화면.
- 다른 스레드가 백그라운드에서 목록에 추가 할 개체를 다운로드 중입니다.
요구 사항 :
- 목록 화면이 모든 그것의 객체를 얻기 위해 MOC와 NSFetchedResultsController를 사용합니다.
- 편집 및 새 객체 화면은 MOC를 사용하여 객체를 저장/삭제하고 관계에 NSFetchedResultsController를 사용합니다.
- 다운로드 된 개체는 개체를 Core Data (주 스레드)에 저장하려면 MOC가 필요합니다.
질문 :
- 내가 얼마나 많은 MOCS 필요합니까?
- 어떻게 이러한 MOC를 조작해야합니까?
가능한 답변 :
편집되지 않습니다 및 목록 화면에서 사용되는 하나의 "보기"MOC 되세요. 편집, 새로운 객체 화면 및 다운로드에 별도의 MOC를 사용하십시오. 이러한 MOC가 저장되면 변경 사항을 다시 "View"MOC에 병합하십시오. 이렇게하면 모든 변경 사항이 저장 될 때까지 "보기"MOC에 영향을 미치지 않습니다. 이것이 내가 한 일이다. 그것은 내가 원하는만큼 부드럽게 작동하지 않는 것 같습니다. 편집과보기 사이의 연결이 끊어지며 변경된 사항을 알았을 때 상황을 확인할 수있는 대신 NSFetchedResultsController 대리자 메서드가 완료 될 때까지 기다렸다가 변경된 모든 가능한 항목을 확인해야합니다. 또한 목록보기에서 일부 데이터를 변경해야하는 경우 어려워집니다.
모든 것에 대해 하나의 MOC가 있어야합니다. 이것은 내가 처음 시도했지만 편집과 생성을 다루는 방법에 대해 확신하지 못했습니다. 이제는 조금 더 이해 했으므로 개체를 편집하거나 개체를 만들고 취소시
rollBack
을 만들 수 있습니다. cimgf에서 나는 편집/생성과 취소시undo
을 취소 할 것을 말한 비슷한 것으로 보이는 post을 보았습니다. 그런 다음 사용자가 주 MOC에서 편집하는 동안 완료되고 저장 될 수 있기 때문에 다운로드 한 객체에 별도의 MOC를 사용할 수 있다고 생각합니다.어쨌든 요점은 적절한 방법이 무엇인지 모르겠다는 것입니다. 너 나 좀 도와 줄 수있어?대상 (1) 편집 MOC에서 만든 첫 번째 가능한 대답
- 에 대한
예를 분리합니다. 저장 됨. 알림으로 뷰 moc와 병합되었습니다.
답장을 보내 주셔서 감사합니다. 예, 알림을 사용하여 기본 스레드의보기 moc를 업데이트하고 있습니다. 예, NSFetchedResultsControllerDelegate 사례를 올바르게 처리하고 있습니다. 질문에 단절의 예를 추가했습니다. 지금까지이 방법이 가장 좋은 해결책 인 것 같습니다. - 할 수있는 한 1moc를 사용하십시오. - 주 moc을 사용할 수없는 경우 매번 * 새 항목을 만드십시오 * 다른 곳에서 변경 한 내용을 저장하지 않으려면 항목을 변경해야합니다. 또는 가능한 경우 해당 moc에 변경 사항을 병합하십시오. - 주 메뉴 이외의 모든 메뉴는 변경 사항을 주 메뉴에 병합해야합니다. 찾았습니까? – jasongregori
그런 것. 나는 NSFetchedResultController에 의해 사용 된 메인 moc를 가졌다. 백그라운드 작업 (NSOperations에 패키지 됨)에는 자체 moc가있었습니다. 해당 mocs에서 이루어진 모든 변경 사항은 알림을 사용하여 주 moc에 전달되고 병합되었습니다. 그래서 본질적으로 주 moc는 읽기 전용이었습니다. 이 물건은 까다 롭고 그것을 올바르게 얻는 데 시간이 걸립니다. 많은 시행 착오. – lyonanderson