![](/img/trans.png)
[英]Reload data of UITableView in background/foreground at specific time
[英]Reload UITableView data every time context changes?
我有一個UITableViewController,它是CoreDataTableViewController
的子類(這是Stanford類 )。 那實現了一個fetchedResultsController
。
現在,在我的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
的更改如何,我都必須始終刷新? 我目前將其設置為僅在應用程序加載時執行一次。
固定,我要做的就是在該委托方法中放一個襯里:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
}
結束對表的更新,插入,刪除和更改(本質上刷新了我的視圖)與Apple文檔中的相同。
現在,它會根據內容更改進行更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.