7
我有一個問題,我在後臺線程中更新多對多關係,這在threa中正常工作,但是當我將對象發送回主線程更改不顯示。如果我關閉了應用程序並重新打開,數據保存正常並且更改顯示在主線程中。還使用[上下文鎖定]而不是一個不同的託管對象上下文工作正常。核心數據管理的對象上下文線程同步
我已經試過的NSManagedObjectContext:
- (BOOL)save:(NSError **)error;
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag;
在整個過程的不同階段,但它似乎並沒有幫助。
我的核心數據的代碼使用下面的吸氣劑,以確保所有操作都是線程安全的:
- (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 2011-08-15 22:35:06