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

Posted

技术标签:

【中文标题】为啥我需要的数据存在时 [context executeFetchRequest: request error: &error] 有时无法获取数据?【英文标题】:Why does [context executeFetchRequest: request error: &error] fail to get data sometimes when the data I need exist?为什么我需要的数据存在时 [context executeFetchRequest: request error: &error] 有时无法获取数据? 【发布时间】:2014-05-07 14:03:45 【问题描述】:

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

[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: &amp;error] 被执行时。之后,该方法运行良好。

所以我想知道为什么会发生这种情况,有人可以帮助我吗?

【问题讨论】:

是否有错误(添加到您的日志行)?你是从一家空店开始的吗?你会在后台填充你的商店吗? 没有错误。而且我很确定我的数据库不是空的,否则它不会在尝试 2 或 3 次后获取照片并很好地显示它们。 context 是异步填充的实例变量吗?不应该。如果您实际登录 error 而不是只是向我们保证没有,会发生什么? 【参考方案1】:

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

这里有一些提示。

首先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 Simulator/VERSION/Applications/APP ID/Documents/DB FILE.sqlite

除了 Dan Shelly 的评论,你是否正在执行任何后台操作来显示图像?

【讨论】:

如果成功获取照片,一些照片将显示在我的表格视图中。当它失败时,我的表格视图中不会显示任何内容。我不采取任何后台操作来显示照片。在我的表格视图中,我编写了一些代码,如果获取了一些照片(作为我相册封面的照片),则显示它们,如果没有获取照片,则不显示任何内容。 让我抓狂的是,在执行相同的代码时,有时它会立即获取我需要的照片,而有时它会在 fetch 方法执行几次后成功获取它们。更糟糕的是,有时在 fetch 方法执行 10 次后仍然无法获取。

以上是关于为啥我需要的数据存在时 [context executeFetchRequest: request error: &error] 有时无法获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

为啥android中都需要传递参数Context

在 Symbian^3 中通过 VBO 方法加载 3D 对象时获取 KERN-EXEC 3,为啥?

为啥 find 命令的 -exec 选项需要反斜杠和分号?

sudo:没有 tty 存在,也没有指定 askpass 程序使用 shell_exec 时

为啥需要关闭另一个进程的管道加上 set_close_on_exec 才能真正关闭?

为啥我的 exec 命令失败但如果命令在终端中传递则可以工作?