SQLite查询有结果,但是当从方法返回时,它会丢失数据

时间:2013-10-02 15:54:57

标签: ios ios6 nsmanagedobjectcontext

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

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

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