我有一个多线程应用程序,可以在服务器和 ios 设备之间同步数据。
同步发生在单独的线程上。我对NSManagedObjectContext使用单例模式,它是在主线程上创建的。我开始遇到线程问题,经过研究,我发现不应在已初始化的线程之外使用上下文。所以我在主线程的上下文中调用 init 并在我的同步线程中使用它。为了解决这个问题,我做了以下事情。
我创建了一个返回NSPersistentStoreCoordinator的全局方法,在同步线程上我使用这个协调器来创建一个新的上下文。这摆脱了线程问题,但现在我得到了一些其他奇怪的行为。
在我的同步线程中,我调用executeFetchRequest方法并将结果数组返回给其他方法。当我调试时,我看到有 93 条记录,并且都充满了数据。然后我在返回的方法上检查数组,但即使我仍然得到 93 条记录,列的值都是 nil。
这是代码
+(NSArray *) GetAllRowsInTable:(NSString *) tableName
{
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setPersistentStoreCoordinator:[Globals GetPersistentStoreCoordinator]];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:tableName inManagedObjectContext:context]];
NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];
return results;
}
有谁知道为什么会发生这种情况?