나는 같은 강연 시리즈를 매우 밀접하게 따랐다. 이 특정 예제는 Flickr에서 데이터 (사진 작가 및 사진)를 가져와 CoreData에로드합니다. 이 응용 프로그램에서 CoreData를 사용할 필요는 없었습니다. 왜냐하면 모든 응용 프로그램로드시 flickr에서 새 데이터를 가져와야하기 때문에 지속적으로 절약 할 필요가 없습니다. Professor는 학생들이 이미 CoreData에 익숙해 졌기 때문에 이전 데모에서 시작한 flickr 가져 오기 앱을 시작점으로 사용했습니다. 그러나 릭스터가 언급했듯이 디스크에 컨텍스트를 저장하지 않고 코어 데이터를 사용하면 큰 이점이 있습니다.
바울이 데모 전에 강의에서 설명하고있는 바와 같이, 핵심 데이터베이스 중 하나에 의해 (iOS5를에서) 만들 수 있습니다 : 새 프로젝트를 만들 때 응용 프로그램 템플릿
- 클릭 "사용의 핵심 데이터".
첫 번째 방법 뒤에 아이디어를 UIManagedDocument을 사용는
엑스 코드는 사용자의 문서 디렉토리/영구 저장소 코디네이터/모델을 설정하는 AppDelegate에 코드를 잔뜩 넣어 것입니다. 그런 다음 관리 대상 객체 CONTEXT를 초기보기 컨트롤러 (공개 API에 NSManagedObjectContext 속성이 있어야 함)로 전달하고 다른 뷰 컨트롤러와 연결될 때 맥주 병처럼 컨텍스트를 전달할 수 있습니다. 컨텍스트를 전달하는 것은 핵심 데이터베이스에 액세스하는 올바른 절차입니다. UIManagedDocument 사용은 AppDelegate 만 남겨둔 경우를 제외하고는 매우 유사합니다. 앱의 문서 디렉토리에있는 URL 경로를 사용하여 UIManagedDocument (초기보기 컨트롤러에서)를 만들 수 있습니다 (참고 : 파일이 이미 존재하고 존재하지만 열리지 않았는지 또는 존재하지 않는지 수동으로 확인해야합니다). 그런 다음 위와 같은 방법으로이 문서의 컨텍스트를 사용할 수 있습니다.
또 다른 참고 사항 : AppDelegate에서 컨텍스트에 대한 포인터를 만들어 앱이 충돌하거나 종료 될 때 컨텍스트를 명시 적으로 저장할 수 있도록하는 것이 좋습니다.
영구 저장소 조정자는 자동으로 설정되며 persistentStoreOptions 속성을 사용하여 구성 할 수 있습니다. 실제로는 컨텍스트를 영구히 저장해야하거나 UIManagedDocument를 서브 클래 싱하고 원하는 메서드를 재정의해야합니다.
이 두 방법은 같은 방식으로 작동하고, 동일한 제어 및 액세스를 제공 UIManagedDocument 문서 http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIManagedDocument_Class/Reference/Reference.html 의 개요를 읽어보십시오. UIManagedDocuments를 사용하면 여러 sqlite 파일에 여러 개의 데이터베이스를 만들 수 있습니다. 필요할 때까지 데이터베이스를 만들거나 설정할 때까지 기다릴 수도 있습니다. "코어 데이터 사용"옵션은 응용 프로그램로드시 설정하는 단일 코어 데이터베이스를 제공하며, AppDataele에 CoreData를 중앙 집중화하고, 코딩 시간을 절약하며, 빠른 트랙 응용 프로그램에 유용합니다. 나는 UIManagedDocument를 좋아한다.
핵심 데이터 옵션을 선택하지 않고 시작한 AppData를 AppDelegate에 추가하려는 경우 핵심 데이터가 선택된 새 프로젝트를 만들고 모든 코드를 AppDelegate에 복사하십시오 (단지 3 개의 속성과 해당 접근자가 있어야 함). 문서 디렉토리에 액세스하는 편리한 방법). 초기 뷰 컨트롤러, 모델 등을 가리켜 야합니다.
업데이트 : 다른 편의를 추가하고 싶습니다. 관리되는 개체 컨텍스트가 AppDelegate에 저장되어있는 경우, 당신은 단지 그것을 주변에 통과
NSManagedObjectContext* context = [[(AppDelegate*) [UIApplication sharedApplication] delegate] myManagedObjectContext];
이 가진 부정를 사용하여 어디에서나 응용 프로그램에 액세스 할 수 있습니다.
CoreData 앱의 경우 모델을 변경하는 경우 다시 작성하기 전에 시뮬레이터에서 앱을 수동으로 삭제해야합니다. 그렇지 않으면 이전 파일을 사용할 것이므로 다음 빌드에서 오류가 발생합니다.
그 장황한 해답을 바탕으로 AppDelegate에 백 포인터를 사용하여 어디서든 컨텍스트를 잡을 수는 있지만 선호하지는 않습니다. – Patrick
절대적으로 화려한 대답. 여기에 UIManahegDocument를 저장하는 코드 스 니펫이 있습니다. [document saveToURL : document.fileURL forSaveOperation : UIDocumentSaveForOverwriting completionHandler : NULL]; – brainray