簡體   English   中英

每次上下文更改時是否重新加載UITableView數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM