我有一個UITableViewController是CoreDataTableViewController
(它是Stanford class)的子類。這實現了fetchedResultsController
。每當上下文更改時重新加載UITableView數據?
現在,在我的viewWillAppear
,我有這樣的:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if(!self.managedObjectContext) {
[self useManagedDocument];
}
}
它初始化managedObjectContext
如果我沒有之一,從一個輔助類得到它。在MOC二傳手,我初始化fetchedResultsController
:
- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext
{
_managedObjectContext = managedObjectContext;
if(self.managedObjectContext) {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:CD_ITEM_ENTITY_NAME];
request.sortDescriptors = @[[NSSortDescriptor
sortDescriptorWithKey:CD_ITEM_NAME_PROPERTY
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
request.predicate = nil;
self.fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
} else {
self.fetchedResultsController = nil;
}
}
當我的程序啓動時,它正確地加載表數據和我說,調試器有做了一個獲取請求。然而,將數據插入我的核心數據曲線圖,並保存後,它說,環境的變化和火災此委託方法:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
/*NSError *error;
[controller performFetch:&error];
if(error) {
NSLog(@"%@", error);
}
[self.tableView reloadData];*/
}
我評論這個,因爲它不工作。基本上,我想要做的是每次上下文更改時重新加載數據。如果我在另一個視圖控制器中添加一個項目然後回到這個項目,它也應該重新加載。
我該如何實施?我試着在該代理方法中執行performFetch
,並將其輸入(我通過在內部設置斷點來檢查),但performFetch
什麼也沒做,我的表格也沒有重新加載。
當我在一個模式VC添加一個項目(另一個我有管理的項目)這是在我的記錄情況:
2013-05-10 22:41:38.264 App1[7742:c07] [ItemCDTVC performFetch] fetching all Item (i.e., no predicate)
2013-05-10 22:41:46.454 App1[7742:c07] NSManagedObjects did change.
2013-05-10 22:41:46.456 App1[7742:c07] NSManagedContext did save.
當我關閉應用程序,但沒有從多任務戒菸吧酒吧,然後重新打開它,它什麼都不做。沒有獲取。那麼,如果上下文沒有改變,我不希望它發起請求,但想象一下,如果用戶在另一個ViewController中添加一個項目,然後返回到我的ItemCDTVC,它列出所有項目。它是否獲取了上下文更改通知,以便它可以調用委託方法來更新表,或者無論我的viewWillAppear
中的更改是否總是需要刷新?我目前已將它設置爲僅在應用程序加載時執行一次。