0

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

该应用程序有一个主表视图,每一行都会显示另一个表视图,就像 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. 再次按下弹出按钮(列表已更新)。

谁能帮我整理一下?谢谢!

下面是代码:

订单视图.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
    }   
}

细节视图.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];
}
4

1 回答 1

0

我使用 NSNotification 来解决这个问题,因为 NSNotification 会遍历整个应用程序,所以我在 popover table view 设置了一个 NSNotification 接收器,当 popover table view 收到通知时,它会执行 fetch 请求来获取数据。

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

就这样,问题解决了。

于 2013-03-29T04:36:11.153 回答