2013-03-03 62 views
1

我有一个由NSFetchedResultsController支持的表视图。更改的sectionNameKeyPath属性值不反映在NSFetchedResultsController上

任何时候底层上下文中的对象发生更改时,NSFetchedResultsController都会自动在表视图上反映新的属性值。好极了。

我注意到的一个例外是,用于sectionNameKeyPath的属性值的更新不会自动反映出来。

我在猜测用于sectionNameKeyPath的属性值是NSFetchedResultsController的基础,我需要执行提取&重新加载表视图?

更新:继承人用于配置码的获取请求

- (void)configureFetch { 

CoreDataHelper *cdh = [(AppDelegate *)[[UIApplication sharedApplication] delegate] cdh]; 

NSFetchRequest *request = 
[NSFetchRequest fetchRequestWithEntityName:@"Item"]; 

request.sortDescriptors = 
[NSArray arrayWithObjects: 
[NSSortDescriptor sortDescriptorWithKey:@"locationAtHome.storedIn" 
           ascending:YES], 
[NSSortDescriptor sortDescriptorWithKey:@"name" 
           ascending:YES], 
nil]; 
[request setFetchBatchSize:15]; 
self.frc = 
[[NSFetchedResultsController alloc] initWithFetchRequest:request 
            managedObjectContext:cdh.context 
             sectionNameKeyPath:@"locationAtHome.storedIn" 
               cacheName:nil]; 
self.frc.delegate = self; 
} 

,并执行该代码的取出:

- (void)performFetch { 

if (self.frc) { 
    [self.frc.managedObjectContext performBlockAndWait:^{ 
     NSError *error; 
     [self.frc performFetch:&error]; 
     if (error) NSLog(@"%@ '%@' %@ (Reason: %@)", 
         self.class, NSStringFromSelector(_cmd), 
         error.localizedDescription, error.localizedFailureReason); 

     [self.tableView reloadData]; 
    }]; 
} 
} 
+0

你可以显示你的代码创建读取结果控制器(与获取请求,谓词,排序描述符)? – 2013-03-03 10:50:23

+0

更新了代码 – Timbo 2013-03-03 11:15:32

回答

1

的问题不是用作sectionNameKeyPath是属性已更改,但相关对象中的属性已更改。

提取的结果控制器仅跟踪所提取对象本身的变化(项目对象),但不跟踪相关对象。

唯一的解决方案(据我所知)是将该部分作为附加属性添加到项目实体,即使这意味着您有重复的数据。

+0

这很有道理。每当此值发生变化时,我都会通过发送通知来执行performFetch来解决此问题。感谢您的及时回复! – Timbo 2013-03-03 11:28:32

+0

@Timbo:不客气。 – 2013-03-03 11:28:49

相关问题