0

我有一个多线程应用程序,可以在服务器和 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;
}

有谁知道为什么会发生这种情况?

4

1 回答 1

0

我想我知道为什么会这样。在阅读了 NSManagedObject 之后,我得出了以下结论。当调用 ExecuteFetchRequest 时,这将返回一个错误结果数组,这意味着除非在 NSManagedObject 上调用 valueForKey 方法,否则不会从持久存储中检索其值。由于我在方法中创建了上下文并将结果返回给某个其他方法,其中创建的结果的上下文不存在,所以我没有得到任何结果。所有的错误最终都会失败。

于 2013-10-02T17:20:25.017 回答