在我的应用中,我使用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]
被执行时。之后,该方法运作良好。
所以我想知道为什么会这样,有人可以帮助我吗?
答案 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的评论外,您是否正在执行任何背景操作来显示图像?