【问题标题】:NSFetchRequest setReturnsObjectsAsFaults: doesn't workNSFetchRequest setReturnsObjectsAsFaults:不起作用
【发布时间】: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


【解决方案1】:

我也观察到了这一点。就我而言,我是在子上下文中获取结果。当我将 fetch 更改为在主上下文中时,returnsObjectsAsFaults 的行为正常。

同样,如果我从子上下文中提取,returnsObjectsAsFaults 没有按预期工作。

出于同样的原因,这里有人遇到了类似的问题: https://stackoverflow.com/a/14801402/1060314

【讨论】:

  • 非常感谢!这解决了我的问题。我正在获取背景上下文。
猜你喜欢
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
相关资源
最近更新 更多