我最近正在开发一个应用程序,允许用户将项目添加到订单列表中,他们可以按一个按钮调出一个弹出窗口视图,我正在使用核心数据来存储数据。
该应用程序有一个主表视图,每行将显示另一个表视图,就像具有滑动菜单的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 | |
|-----------------------------|---------------------------------|
在以下情况中出现问题:
启动应用。
选择第一个表格视图。
按下添加按钮,将一些项目添加到列表中。
按下弹出框以查看弹出窗口视图(列表已更新)。
关闭弹出窗口视图。
进一步在列表中添加更多项目。
按下弹出按钮(列表保持不变,表格视图尚未更新)。
转到另一个表格视图(或再次调用相同的表格视图)
再次按下弹出按钮(列表已更新)。
有人可以帮我解决一下吗?谢谢!
以下是代码:
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];
}
答案 0 :(得分:0)
我使用NSNotification解决了这个问题,因为NSNotification将遍历整个应用程序,因此我在popover表视图中设置了一个NSNotification接收器,当popover表视图收到通知时,它将执行获取请求以获取数据
当按下添加按钮时,它会发出通知,要求弹出窗口视图获取数据。
就是这样,问题解决了。