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. ポップオーバー ボタンをもう一度押します (リストが更新されます)。

誰かがそれを整理するのを手伝ってくれますか? ありがとう!

以下はコードです:

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];
}
4

1 に答える 1

0

NSNotification はアプリ全体を通過するため、この問題を解決するために NSNotification を使用しました。そのため、ポップオーバー テーブル ビューに NSNotification レシーバーを設定し、ポップオーバー テーブル ビューが通知を受け取ると、フェッチ リクエストを実行してデータを取得します。

追加ボタンが押されると、ポップオーバー ビューにデータを取得するように求める通知が送信されます。

それで、問題は解決しました。

于 2013-03-29T04:36:11.153 に答える