【问题标题】:iPhone Core Data does not refresh tableiPhone Core Data 不刷新表格
【发布时间】:2011-01-10 23:08:15
【问题描述】:

我正在尝试使用 Core Data 编写应用程序,并且我已经能够成功地读取和写入核心数据数据库。但是,如果我在一个视图控制器中写入数据库,我的其他视图控制器将不会看到更改,直到应用程序关闭然后再次重新打开。这真是令人沮丧。我不完全确定如何使刷新- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag 方法起作用。如何获取对我的托管对象的引用?

无论如何,这是我用来读回数据的代码。这是在 viewDidLoad 方法中。

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Website" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"siteName" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];

NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if(mutableFetchResults == nil) {
    //Handle the error
}

[self setNewsTitlesArray:mutableFetchResults];
[mutableFetchResults release];
[request release];

[newsSourcesTableView reloadData];

提前感谢您的帮助!

【问题讨论】:

    标签: iphone database refresh reload iphonecoredatarecipes


    【解决方案1】:

    我不完全确定您打算做什么,据我了解您正在一个视图控制器中更改您的托管对象上下文,并且您希望结果在其他视图控制器中可见,这是正确的吗?无论如何,对此的解决方案是监听 NSManagedObjectContextDidSaveNotification(在保存上下文时发送)并将您希望受更改影响的视图控制器注册为观察者:

    NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
    [dnc addObserver:myController selector:@selector(updateTable:) name:NSManagedObjectContextDidSaveNotification object:controller.context];
    

    myController 控制器中的 updateTable 选择器可能如下所示:

    - (void)updateTable:(NSNotification *)saveNotification
    {
    if (fetchedResultsController == nil)
    {
        NSError *error;
        if (![[self fetchedResultsController] performFetch:&error]) {
        //Update to handle the error appropriately.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            exit(-1);  // Fail
        }       
    }
    else
    {
        NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
        // Merging changes causes the fetched results controller to update its results
        [context mergeChangesFromContextDidSaveNotification:saveNotification];  
        [self.tableView reloadData];
    }
    

    希望对您有所帮助。

    -奥斯卡

    【讨论】:

      【解决方案2】:

      实际上,我发现我将表格设置为加载为我的视图。当我将表格放入另一个视图时,一切正常。

      【讨论】:

        猜你喜欢
        • 2010-12-12
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        相关资源
        最近更新 更多