메인 테이블 뷰 컨트롤러에서 NSFetchedResultsController를 사용하는 iPhone 앱을 개발 중입니다. 나는 기본 테이블 뷰 컨트롤러의 viewDidLoad에이처럼 만들 :NSManagedObjectContext가 자동 저장 되었습니까? 아니면 NSFetchedResultsController의 캐시를보고 있습니까?
TestObject *testObject = [NSEntityDescription insertNewObjectForEntityForName:@"TestObject" inManagedObjectContext:context];
TestObject는 관련 몇 가지가 있습니다
NSSortDescriptor *sortDescriptorDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSSortDescriptor *sortDescriptorTime = [[NSSortDescriptor alloc] initWithKey:@"start" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorDate,sortDescriptorTime, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptorDate release];
[sortDescriptorTime release];
[sortDescriptors release];
controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:@"date"
cacheName:nil];
[fetchRequest release];
NSError *error;
BOOL success = [controller performFetch:&error];
후, 그 다음보기에서, 나는 상황에서 새로운 객체를 생성 동일한 방법으로 생성하고 제공된 add ... Objects 메소드를 사용하여 testObject에 추가하는 객체.
그런 다음 컨텍스트를 저장하기 전에 취소를 누르고 기본 테이블보기로 돌아 가면 아무 것도 예상대로 표시되지 않습니다. 그러나 응용 프로그램을 다시 시작하면 컨텍스트에서 만든 개체가 주 테이블보기에 표시됩니다. 어째서? 처음에는 NSFetchedResultsController가 캐시에서 읽었 기 때문에 생각했습니다. 그러나 여러분이 볼 수 있듯이 테스트하기 위해 이것을 nil로 설정했습니다. 또한 [컨텍스트 hasChanges]는 다시 시작한 후 true를 반환합니다. 내가 여기서 무엇을 놓치고 있니?
Marcus에게 감사드립니다. Xcode에서 프로젝트를 만들 때 "스토리지에 코어 데이터 사용"을 선택했습니다. 이 옵션을 사용하면 컨텍스트가 applicationWillTerminate에 저장됩니다. – Andreas