为啥我需要的数据存在时 [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: &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] 有时无法获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
在 Symbian^3 中通过 VBO 方法加载 3D 对象时获取 KERN-EXEC 3,为啥?
sudo:没有 tty 存在,也没有指定 askpass 程序使用 shell_exec 时