UITableView不会重新加载数据

时间:2013-03-28 17:22:25

标签: ios uitableview core-data

我最近正在开发一个应用程序,允许用户将项目添加到订单列表中,他们可以按一个按钮调出一个弹出窗口视图,我正在使用核心数据来存储数据。

该应用程序有一个主表视图,每行将显示另一个表视图,就像具有滑动菜单的Facebook应用程序一样。

应用程序的布局如下所示:

|---------------------------------------------------------------|
|                                                ______________ |
|                                               |Popover Button||
|                                                -------------- |
|---------------------------------------------------------------|
|-----------------------------|First table item 1               |
|Row to call the First table  |                                 |
|-----------------------------|---------------------------------|
|Row to call the Second table |First table item 2               |
|-----------------------------|                                 |
|Row to call the Third table  |---------------------------------|
|-----------------------------|First table item 3               |
|Row to call the Fourth table |                                 |
|-----------------------------|---------------------------------|

在以下情况中出现问题:

  1. 启动应用。

  2. 选择第一个表格视图。

  3. 按下添加按钮,将一些项目添加到列表中。

  4. 按下弹出框以查看弹出窗口视图(列表已更新)。

  5. 关闭弹出窗口视图。

  6. 进一步在列表中添加更多项目。

  7. 按下弹出按钮(列表保持不变,表格视图尚未更新)。

  8. 转到另一个表格视图(或再次调用相同的表格视图)

  9. 再次按下弹出按钮(列表已更新)。

  10. 有人可以帮我解决一下吗?谢谢!

    以下是代码:

    OrderView.m

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.navigationItem.leftBarButtonItem = self.editButtonItem;
    
        //load lists
        NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Dish"];
        fetchRequest.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"created" ascending:YES]];
    
        self.lists = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
    
        [self.tableView reloadData];
    }
    
    - (NSManagedObjectContext *)managedObjectContext
    {
        return [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
    }
    
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
    
            [self.managedObjectContext deleteObject:[self.lists objectAtIndex:indexPath.row]];
            [self.managedObjectContext save:nil];
    
            NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Dish"];
            fetchRequest.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"created" ascending:YES]];
    
            self.lists = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
    
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }   
        else if (editingStyle == UITableViewCellEditingStyleInsert) {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        }   
    }
    

    DetailView.m

    - (IBAction)popupAddToOrderButtonPressed:(id)sender
    {
        OrderViewController *orderView = [[OrderViewController alloc] initWithNibName:@"OrderViewController" bundle:nil];
        Dish *newList = [NSEntityDescription insertNewObjectForEntityForName:@"Dish" inManagedObjectContext:orderView.managedObjectContext];
        newList.created = [NSDate date];
        newList.title = self.popupTitle.text;
        [orderView.managedObjectContext save:nil];
        orderView.lists = [orderView.lists arrayByAddingObject:newList];
    }
    

1 个答案:

答案 0 :(得分:0)

我使用NSNotification解决了这个问题,因为NSNotification将遍历整个应用程序,因此我在popover表视图中设置了一个NSNotification接收器,当popover表视图收到通知时,它将执行获取请求以获取数据

当按下添加按钮时,它会发出通知,要求弹出窗口视图获取数据。

就是这样,问题解决了。