iPhone核心数据不刷新表

时间:2010-01-29 18:02:03

标签: iphone database refresh reload iphonecoredatarecipes

我正在尝试使用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];

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我不完全确定你打算做什么,我理解你在一个视图控制器中更改托管对象上下文,并且希望结果在其他视图控制器中可见这是正确的吗?无论如何,解决方案是侦听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];
}

希望有所帮助。

-Oscar

答案 1 :(得分:-1)

实际上,我发现我将表设置为我的视图。当我把表放到另一个视图中时,一切正常。