나는 그 threa에서 작동하는 백그라운드 스레드에서 다 대다 관계를 업데이트 할 때 문제가 있지만 주체로 개체를 다시 보내면 스레드가 변경 사항을 표시하지 않습니다. 앱을 닫고 다시 열면 데이터가 잘 저장되고 변경 사항이 기본 스레드에 표시됩니다. 또한 다른 관리되는 개체 컨텍스트 대신 [컨텍스트 잠금]을 사용하면 문제가 없습니다. 과정 전반에 걸쳐 다른 단계에서핵심 데이터 관리 된 개체 컨텍스트 스레드 동기화
- (BOOL)save:(NSError **)error;
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag;
를하지만 도움이하지 않는 것 :
나는 NSManagedObjectContext 노력했다.
내 핵심 데이터 코드는 어떤 작업 스레드 안전 보장하기 위해 다음과 같은 게터를 사용
- (NSManagedObjectContext *) managedObjectContext
{
NSThread * thisThread = [NSThread currentThread];
if (thisThread == [NSThread mainThread])
{
//Main thread just return default context
return managedObjectContext;
}
else
{
//Thread safe trickery
NSManagedObjectContext * threadManagedObjectContext = [[thisThread threadDictionary] objectForKey:CONTEXT_KEY];
if (threadManagedObjectContext == nil)
{
threadManagedObjectContext = [[[NSManagedObjectContext alloc] init] autorelease];
[threadManagedObjectContext setPersistentStoreCoordinator: [self persistentStoreCoordinator]];
[[thisThread threadDictionary] setObject:threadManagedObjectContext forKey:CONTEXT_KEY];
}
return threadManagedObjectContext;
}
}
내가 스레드간에 개체를 전달할 때 나는
-(NSManagedObject*)makeSafe:(NSManagedObject*)object
{
if ([object managedObjectContext] != [self managedObjectContext])
{
NSError * error = nil;
object = [[self managedObjectContext] existingObjectWithID:[object objectID] error:&error];
if (error)
{
NSLog(@"Error makeSafe: %@", error);
}
}
return object;
}
사용하고 어떤 도움이
감사
편집 : 이전에 threadDictionary를 사용하고 싶었습니다. – Wendel