2012-07-07 3 views
0

나는이 대리자 메서드가이 메소드가 호출 될 때managedObjectContext save가 즉시 삽입되지 않습니까?

- (void)didFinishCreatingTrip:(Trip *)trip 
{ 
    NSLog(@"before"); 
    NSError* error = nil; 
    if (![self.database.managedObjectContext save:&error]) { 
     NSLog(@"%@", error); 
    } 
    NSLog(@"after"); 
} 

가 삽입 SQL 쿼리가 즉시 발생하지 않습니다,하지만 약 10 초 후에 (콘솔 로그에 따라). 예상 되나요? 즉시이를 위해 무엇을 할 수 있습니까? 문제는 너무 일찍 아이폰 시뮬레이터를 죽일 때 내 데이터가 손실된다는 것입니다.

로그 :

2012-07-07 23:29:41.702 tripmoney[57542:fb03] before 
2012-07-07 23:29:41.703 tripmoney[57542:fb03] after 
2012-07-07 23:29:54.948 tripmoney[57542:11407] CoreData: sql: BEGIN EXCLUSIVE 
2012-07-07 23:29:54.949 tripmoney[57542:11407] CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ? 
2012-07-07 23:29:54.950 tripmoney[57542:11407] CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ? 
2012-07-07 23:29:54.951 tripmoney[57542:11407] CoreData: sql: COMMIT 
2012-07-07 23:29:54.953 tripmoney[57542:11407] CoreData: sql: BEGIN EXCLUSIVE 
2012-07-07 23:29:54.954 tripmoney[57542:11407] CoreData: sql: INSERT INTO ZTRIP(Z_PK, Z_ENT, Z_OPT, ZNAME) VALUES(?, ?, ?, ?) 
2012-07-07 23:29:54.955 tripmoney[57542:11407] CoreData: sql: COMMIT 
2012-07-07 23:29:54.956 tripmoney[57542:11407] CoreData: sql: pragma page_count 
2012-07-07 23:29:54.957 tripmoney[57542:11407] CoreData: annotation: sql execution time: 0.0006s 
2012-07-07 23:29:54.957 tripmoney[57542:11407] CoreData: sql: pragma freelist_count 
2012-07-07 23:29:54.958 tripmoney[57542:11407] CoreData: annotation: sql execution time: 0.0006s 
+0

는 당신에게 당신이 생각하는 경우이 메소드가 호출되고 확실한가요? 10 초 * 미친 *이며, 또한 그 방법은 비동기라고 생각하지 않습니다. if 블록 앞뒤에 로그인하여 언제 호출되는지 확인하십시오. –

+0

로그와 함께 편집되었습니다. 실제로 비동기로 보입니다. –

+0

실제로 그것은 ... –

답변

0

CoreData이 일부 개체의 메모리 캐시를 유지하여 작동합니다. 그것은 어떤 것들을 유지하기로 결정했는지 조금 신비 스럽지만, 아마도 당신이 최근에 메모리에 액세스했던 것들을 유지할 것이므로 다음에 그것을 필요로 할 때 디스크에 갈 필요가 없다고 생각합니다. 이것이 메모리 내 복사본이 올바른 값을 반환하는 이유입니다. 내가 가진 관심사를 이해하지만, 많은 코어 데이터 앱에서이 문제로 인해 결코 물지는 않았습니다. 정말로 염려하신다면 applicationDidEnterBackgroundsave을 추가하고 조금만 머물러보십시오.

0

UIManagedDocument를 사용하여, 단순히 저장 :

[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL]; 
관련 문제