2010-05-09 90 views
0

我正在研究RSS閱讀器代碼,其中的文章被下載並且可以脫機查看。 問題是隻有在所有的文章下降後,包含標題的tableview纔會更新。核心數據被使用。所以每次保存NSobjectcontext時,都會調用[self tableview updatebegins]。表通過fetchcontroller核心數據進行更新。從iPhone的核心數據在tableview中逐個添加單行

我試着保存NSobjectcontext每次保存文章,但不更新tableview。我想要一個類似於instapaper tableview的機制,其中文章被保存並且tableview立即得到更新。請幫助,如果你知道解決方案。提前致謝。


添加代碼,以便更好地理解

AppDelegate.m包含下面的代碼

- (void)feedSuccess:(ZSURLConnectionDelegate*)delegate 

    NSManagedObjectContext *moc = [self managedObjectContext]; 

    CXMLElement *root = [document rootElement]; 
    CXMLElement *channel = [[root elementsForName:@"channel"] lastObject]; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:[NSEntityDescription entityForName:@"FeedItem" inManagedObjectContext:moc]]; 
    for (CXMLElement *item in [channel elementsForName:@"item"])  
    { 
    // push element in core data and then save context 
    //Save context 
    [moc save:&error]; 
    ZAssert(error == nil, @"Error saving context: %@", [error localizedDescription]); 
    } 

這觸發了對錶的改變代碼RootviewController.m

- (void)controllerWillChangeContent:(NSFetchedResultsController*)controller 
{ 
    [[self tableView] beginUpdates]; 
} 

回答

0

如果你用的NSFetchedResults控制器,只需使用其委託的方法

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller; 

如下:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
// In the simplest, most efficient, case, reload the table view. 
    [self.tableView reloadData]; 
} 

每次更新基礎NSManagedObjectContext,該表將自動更新了。

+0

我試過你的代碼。當元素被推送時(保存上下文),但函數controllerDidChangeContent確實被調用,但tableview沒有被更新。請幫忙。 – user336685 2010-05-10 14:11:18

+0

我已經添加了更好理解的代碼。 – user336685 2010-05-10 14:11:42