0

我有一個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中的更改是否總是需要刷新?我目前已將它設置爲僅在應用程序加載時執行一次。

回答

0

固定的,所有我必須做的就是把一個墊片,該委託方法:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    [self.tableView endUpdates]; 
} 

這結束的更新,插入,刪除,並表所做的更改(刷新我的觀點,本質上)的與Apple's documentation相同。

它現在更新內容更改。

相關問題