2

为什么“[self.tableView reloadData]”不能确保我看到刚刚添加到 UITableView 的数据的最新行?(包括代码)这是在从 AddItem 控制器返回到这个委托方法之后我:

  • 使用新值更新核心数据存储库
  • 调用:“[self.tableView reloadData]”
  • 关闭模态视图
  • 但是然后回到 UITableView 新行不存在吗?
  • 当我在模拟器中停止并重新启动 iPhone 应用程序时,该行确实显示正确

为什么“reloadData”在这里对我不起作用,我该怎么办?

注意我知道有一种方法可以通过表格视图中的“insertRowsAtIndexPaths”手动创建一个新行。不确定哪种方法最好,但无论如何都想了解为什么 reloadData 在这里不起作用。

代码:

- (void)newItemController:(NewItemController *)controller didFinishWithSave:(BOOL)save newItemText:(NSString*)itemText 
{   
    // Add data to CoreData store
    WEView *newWEView = (WEView *) [NSEntityDescription insertNewObjectForEntityForName:@"WEView" inManagedObjectContext:managedObjectContext];
    newWEView.title = itemText;

    NSError *error = nil;
    if (![managedObjectContext save:&error]) {
        // Handle the error.
        DLog(@"ERROR DURING SAVE");
        abort();
    }

    // Dismiss the modal view to return to the main list
   [self dismissModalViewControllerAnimated:YES];

    // Reload Data
    [self.tableView reloadData];
}   

谢谢

PS。这是我用来填充 tableview 数据实例变量的代码:

- (void)updateTableDataViaCoreData 
{
    // Core Data Request
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"WEView" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];

    // CoreData Sort Descriptor
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];

    // Core Data - Execute Request
    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
        DLog(@"Error when fetching data");
        abort();
    }

    // Core Data finish Up
    [self setViewConfigArray:mutableFetchResults];
    [mutableFetchResults release];
    [request release];
}
4

3 回答 3

4

从您的代码示例中,您似乎已经使用了推荐的 Core Data 方法,其中您有一个 NSFetchedResultsController 管理 tableview 的数据。如果是这种情况,那么您需要在调用 reloadData 之前告诉 tableview 的 fetchedresultscontroller 重新获取数据。

所以在 reloadData 之前,告诉你的 NSFetchedResultsController 重新获取数据

[[self frc] performFetch:&error];

将对象插入托管上下文不会使其可用于 tableview。

于 2011-03-31T08:14:06.140 回答
0

在关闭视图控制器之前尝试重新加载数据

于 2011-03-31T08:06:43.953 回答
0

您必须使用 as 调用表重新加载

[classname.tableview reloadData];

希望能帮助到你.....

于 2011-03-31T09:04:16.813 回答