为什么[context executeFetchRequest:request error:& error]在我需要的数据存在时有时无法获取数据?

时间:2014-05-07 14:03:45

标签: ios core-data nsmanagedobjectcontext nsfetchrequest

在我的应用中,我使用Core Data foundation来存储我的数据(一些图像)。我需要从我的数据库中获取图像并在表格视图中显示它们。当我的应用程序加载时,它将从数据库中获取一些图像。但是,我很困惑,有时候方法

[context executeFetchRequest: request error: &error] 

无法从我的数据库中获取数据,而有时它运行良好(我很确定数据确实在数据库中)。我在这里添加一些测试代码:

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"Album" inManagedObjectContext:context]];
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"number" ascending:YES];
    request.sortDescriptors = @[sortDescriptor];    
    NSArray *matches = [context executeFetchRequest:request error:&error];

    for (int i = 0; i < 10; i++) {
        if ([matches count]) {
            break;
        }
        matches = [context executeFetchRequest:request error:&error];
        NSLog(@"try one more fetch for my data");
    } 

如果数据库为空,则尝试10次后循环将存在。但是当我的数据库不为空时,从NSLog方法中,我发现有时它在尝试2次后有时会成功获取数据,有时在5次之后,有时在尝试10次之后仍然无法获取数据。更具体地说,这种现象只发生在前几个[context executeFetchRequest: request error: &error]被执行时。之后,该方法运作良好。

所以我想知道为什么会这样,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

你的问题很通用。您应该添加详细信息(失败意味着什么,共享模型,共享获取请求等)

这里有一些提示。

首先,executeFetchRequest:error:将错误视为参数。所以你要检查错误。

NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    // log error here
} else {
    // log results here
}

其次,如果您使用的是SQLite持久性存储,则可以通过以下方式查看Core Data创建的日志:XCode4 and Core Data: How to enable SQL Debugging

最后,如果您使用的是SQLite持久性,您还可以检查已保存的数据。可能的路径可能是:

  

/ Users / NAME / Library / Application Support / iPhone   模拟器/版本/应用程序/ APP ID / Documents / DB FILE.sqlite

除Dan Shelly的评论外,您是否正在执行任何背景操作来显示图像?