【发布时间】:2013-12-11 10:21:32
【问题描述】:
我正在开发基于 Core Data 的应用程序。我正在获取Item。我不希望获取的对象在返回时出错,因为我确信它们会立即被访问。因此,我将returnsObjectsAsFaults 设置为NO。但是,它对我不起作用。
下面是我如何设置我的NSFetchedResultsController。
NSString *cacheName = @"cache";
[NSFetchedResultsController deleteCacheWithName:cacheName];
NSManagedObjectContext *context = APPDELEGATE.managedObjectContext;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:context];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dateCreated" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[request setFetchBatchSize:20];
[request setReturnsObjectsAsFaults:NO];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:cacheName];
[request release];
NSError *error = nil;
BOOL result = [frc performFetch:&error];
if(!result){
NSLog(@"Unresolved core data error");
}
有什么想法吗?
更新:实际上,所有获取的对象都是错误的。
<_PFBatchFaultingArray 0x176f2bc0>(
<Item: 0x17613480> (entity: Item; id: 0x18ba3910 <x-coredata://5C2547EC-0420-4ED5-867D-087DEF4998EA/Item/p610> ; data: <fault>),
<Item: 0x18b832e0> (entity: Item; id: 0x176dda50 <x-coredata://5C2547EC-0420-4ED5-867D-087DEF4998EA/Item/p611> ; data: <fault>),
<Item: 0x18b97040> (entity: Item; id: 0x18b5f830 <x-coredata://5C2547EC-0420-4ED5-867D-087DEF4998EA/Item/p612> ; data: <fault>),
<Item: 0x18bd1d40> (entity: Item; id: 0x18bc2f30 <x-coredata://5C2547EC-0420-4ED5-867D-087DEF4998EA/Item/p613> ; data: <fault>),
<Item: 0x18b996c0> (entity: Item; id: 0x18b8f660 <x-coredata://5C2547EC-0420-4ED5-867D-087DEF4998EA/Item/p619> ; data: <fault>)
)
【问题讨论】:
-
解释一下你对我的意思是什么它对我不起作用
-
您是否有任何日志/测试(CoreData 调试日志)显示过多的故障?
-
@flexaddicted 获取的对象仍然是错误的。
-
@DanShelly “过度故障”是什么意思?谢谢。
-
@Libra,您是否在 CoreData 调试日志中看到任何未批量完成的故障? FRC 正在管理故障,尝试直接在上下文中执行请求,看看是否有故障或已完成的对象。
标签: objective-c core-data fault