0

메인 테이블 뷰 컨트롤러에서 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를 반환합니다. 내가 여기서 무엇을 놓치고 있니?

답변

1

컨텍스트는 절대로 자동 저장되지 않습니다. 저장을보고 있다면 -save: 어딘가에 전화가 있습니다. QED

디스크에 쓰여지고있는 것을 확인하려면 sqlite 파일 자체를보고 있습니까? 쓰여지고있는 것을보기 위해 거기에서 들여다 볼 수 있습니다. 거기에 아무것도 없다면, 아마도 여러분은 시작시 기본 객체 나 무언가를 생성 할 것입니다. 그것은 당신의 버튼이 실제로 (아무것도 취소되지 취소처럼 나에게 소리

+0

Marcus에게 감사드립니다. Xcode에서 프로젝트를 만들 때 "스토리지에 코어 데이터 사용"을 선택했습니다. 이 옵션을 사용하면 컨텍스트가 applicationWillTerminate에 저장됩니다. – Andreas

-1

NSManagedObjectContextNSManagedObjectContext 앱을 다시 시작할 때 개체가 표시되면 인스턴스가 저장 중입니다.

취소 버튼 처리기는 undo 또는 rollback을 사용해야합니다.

+0

를 AppDelegate에있는 - (void)applicationWillTerminate:(UIApplication *)application에서

확인 응용 프로그램 종료에 저장 컨텍스트를 포함하지만 NSManagedObjectContext 저장 왜? 난 몰라 내 코드에 [컨텍스트 저장]을 실행하십시오. – Andreas

+0

나도 몰라,하지만 개체가 시작 사이에 앱에 있다면 어떻게 든 저장해야합니다. 컨텍스트 또는 다른 것을 병합하는 중입니까? (P.S.'save :'메서드는 에러를위한 매개 변수를 취합니다) –

+0

아니요, 하나의 컨텍스트를 사용하고 있습니다. 정상적으로 오류 매개 변수를 사용하고 있습니다. 테스트를 위해 코드에서 모든 컨텍스트 저장을 제거했습니다. 다시 시작한 후에도 모든 내용이 그대로 남아 있습니다. – Andreas

0

는 얽히고 설킨 개구리 상태로, undo 또는 rollback를 실행하지 않는 즉. 문맥에 관해서는

가 저장되고, 당신은 Xcode 프로젝트를 생성하여 시작 했 체크 "를 사용하여 코어 데이터 저장을위한"상자? 그렇다면, 생성 된 템플릿은..

+2

예, "저장소에 코어 데이터 사용"을 사용하여 프로젝트를 만들었으며 applicationWillTerminate에 컨텍스트를 저장하는 것에 대해 알지 못했습니다. – Andreas