핵심 데이터에서로드 된 사람을 나타내는 셀이있는 테이블보기를로드하려고합니다. 그리고 내가 새로운 개체를 삽입하고 컨텍스트를 저장 응용 프로그램을 실행 단지 처음 관리되는 개체 컨텍스트가 저장되지 않았습니다.
@property (nonatomic,strong) NSManagedObjectContext* managedObjectContext;
...
- (NSManagedObjectContext*) managedObjectContext {
if(!_managedObjectContext) {
NSFileManager* manager= [NSFileManager defaultManager];
NSURL* URL= [manager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].firstObject;
URL= [URL URLByAppendingPathComponent:@"PeopleDocument"];
UIManagedDocument* document= [[UIManagedDocument alloc]initWithFileURL:URL];
if([manager fileExistsAtPath:URL.path]) {
[document openWithCompletionHandler:^(BOOL success) {
}];
} else {
[document saveToURL:URL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
}];
}
NSManagedObjectContext* context= [document managedObjectContext];
_managedObjectContext= context;
}
return _managedObjectContext;
}
:
[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext: self.managedObjectContext];
[self.managedObjectContext save:NULL];
나는 또한 로그 시도를이 내가 컨텍스트를 얻을 방법입니다 save:
의 결과는 YES
이고 오류는 없습니다. 하지만 컨텍스트는 진정으로 저장되지 않습니다. 두 번째로 가져온 엔티티 배열이 비어있는 앱을 실행합니다.
업데이트
뭔가 심지어 낯선 일이 : 다른 유사한 질문에 this answer를 읽고, 나는 구원 문서를 강제하는 방법을 발견했습니다
- (void) save {
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self.managedDocument saveToURL:self.managedDocument.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success)
{
NSLog(@"Saved: %d",success);
}];
}
그래서 나는이 코드를 실행 처음 앱을 실행할 때 : #if FIRST_TIME
[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext: self.managedObjectContext];
[self save];
#endif
그 후, FIRST_TIME
을 z로 설정하면 에로, 두 번째는 내가 빈 레코드를 얻을 응용 프로그램을 실행합니다. 하지만 3 번째로 앱을 실행하면 FIRST_TIME
을 1로 설정하면 이전에 만든 모든 레코드를 얻을 수 있습니다 (플러스 생성 된 레코드). 즉, 새 엔티티를 작성하고 저장하면 이전에 작성한 모든 엔티티가 올바르게 반입됩니다. 그렇지 않으면 엔티티가 반입되지 않습니다.
PS : 다시 확인 : 관리되는 개체 컨텍스트는 self.managedDocument.managedObjectContext
에 의해 반환 된 정확한 컨텍스트입니다.
일부 디버그를 만들었습니다. getter가 반환하는 관리 객체 컨텍스트는 항상 동일합니다. 속성은 이미 합성되었습니다. 질문에 속성 선언을 추가하겠습니다. –