2013-03-03 55 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

相關問題