개요 : 백그라운드에서 실행되는 새로 고침 프로세스가 있으며 (performInBackground 만 사용하는 것) 그 중 일부에는 db 업데이트가 있으므로 백그라운드 스레드 용 별도의 MOC 그런 다음 didSave 알림을 사용하여 변경 사항을 병합하지만 DB/내 UI에 이러한 업데이트가 표시되지 않습니다. 저장 전후에 객체 자체를 로깅했는데 속성이 변경된 것을 볼 수 있지만 알림에 의해 호출 된 메소드에서받은 객체의 객체를 기록하고 값을 업데이트하지 않습니다. 아마 다른 것들은 추한 것일 수도 있지만이 핵심 데이터 조각을 찾으려하고 있습니다. 나는 이전에 단 하나의 MOC를 가지고 있었고 일들이 잘되었지만 (비 핵심 데이터는 괜찮을 것입니다.) 저는 배경에있는 것들을 재구성했고 개별 MOC의 지침을 사용하기를 원했습니다.백그라운드에서 핵심 데이터 : 별도의 컨텍스트 및 알림 사용, 새 값으로 DB 업데이트 안 함
컨텍스트 만들기, 알림 설정, 속성 설정 및 저장. 포스트 나는이 전송 된 MOC를 확인하고 내가 만든 더 업데이트, 병합이 발생하면 모든 값이 그래서 1입니다 볼, 값이 여기에 0
// this creates context with same PSC as main MOC
NSManagedObjectContext *context = [[MyAppDelegate application] temporaryContext];
[[NSNotificationCenter defaultCenter] addObserver:(MyAppDelegate *)[[UIApplication sharedApplication] delegate]
selector:@selector(managedObjectContextDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:context];
NSLog(@"value is %d", [[myObject email] boolValue]); //value is 1
[myObject setEmail:[NSNumber numberWithBool:![[myObject email] boolValue]]];
NSError *error;
if (![context save:&error]) {
NSLog(@"Error in saving BriefCase object - error:%@" ,error);
}
NSLog(@"value is %d", [[myObject email] boolValue]); //value is 0 now
이다, 저장합니다. 저장 후 개체에 0이있는 것을 보면 연결이 끊어집니다.
// Called when a ManagedObjectContext performs save operation
- (void)managedObjectContextDidSave:(NSNotification *)notification {
NSManagedObjectContext *receivedMOC = [notification object];
NSArray *items = [MyObjectClass getAllMyObjectsInManagedObjectContext:receivedMOC];
for (int i=0; i < [items count]; i++) {
NSLog(@"value is %d", [[[items objectAtIndex:i] email] boolValue]);
}
시 추가 컨텍스트 생성 코드, 내가 통지를 처리 할 때
[mainMOC mergeChangesFromContextDidSaveNotification:saveNotification];
를 호출이 표시되지 않는 문제
- (NSManagedObjectContext *)temporaryContext {
NSManagedObjectContext *newContext = [[[NSManagedObjectContext alloc] init] autorelease];
NSPersistentStoreCoordinator *psc = [self.managedObjectContext persistentStoreCoordinator];
[newContext setUndoManager:nil];
[newContext setPersistentStoreCoordinator:psc];
return newContext;
1) 코드에서 실제 병합을 볼 수 없습니다. - 2) myObject의 출처는 어디입니까? –
답장을 보내 주셔서 감사합니다. 죄송합니다, 나는이 후에 병합을 가지고 있지만, 내가 알았던 내용은 알림에서받은 컨텍스트가 변경되지 않았다는 것입니다. 병합은 잘 작동하지만 변경 사항을 병합하지 않으면 컨텍스트가 발생하지 않습니다. – skinsfan00atg
myObject는 어디에 생성 되었습니까? –