編集:最初のビューに食品のリストを表示したいようです。アイテムをタップすると、詳細ビューが開きます。その詳細ビューから、ユーザーはボタンを押して食事に追加できます。最終的に、最初のビューのボタンをタップして食事ビューを開くことができます。食事ビューには、選択したすべてのアイテムが含まれているはずです。
この場合は、最初のビュー コントローラーに配列を保持し、詳細 (2 番目の) ビュー コントローラーが表示されたときに最初のビュー コントローラーへの参照があることを確認します。これにより、その配列を使用できるようになります。これを設計するためのより良い方法があることに注意してください。ただし、これは今のところ機能します。
@interface FoodListViewController : UIViewController
@property (strong, nonatomic) NSMutableArray *foodItems
@end
@implementation FoodListViewController
- (void)showFoodItem
{
FoodItemDetailViewController *detailViewController = [[FoodItemDetailViewController alloc] initWithNibName:nil bundle:nil];
detailViewController.foodListController = self;
[self presentModalViewController:detailViewController animated:YES];
}
@end
詳細ビューが表示されたら、「食事に追加」ボタンをタップすると、現在の「mealItem」が配列に追加されます。あなたの例では、文字列を使用していました。何らかの理由で文字列の配列を保持したい場合は、お任せします。
@interface FoodItemDetailViewController : UIViewController
@property (nonatomic, weak) FoodItemsViewController *foodListController;
@end
@implementation FoodItemDetailViewController
- (IBAction)buttonTapped:(id)sender
{
[self.foodListController.foodItems addObject:self.mealItem];
// Update the UI to let the user know that the item was added to the meal
}
@end
最後に、MealDetailsViewController を提示するときが来たら、構築してきた配列を渡します。
@interface MealDetailsViewController : UIViewController
@property (nonatomic, strong) NSArray *foodItems;
@end
@implementation MealDetailsViewController
// Set foodItems before this view controller is presented, then use it to drive the
// UITableView data source, or find some other way of displaying it.
@end
ご覧のとおり、2 番目と 3 番目のビュー コントローラーの両方が最初のビュー コントローラーによって表示されます。ビュー コントローラーは (ほぼ) 常に階層を形成します。そのため、データをその階層の最上位に保持する (FoodListViewController に格納することにより) と、他のビュー コントローラーを表示するときに、データを階層の下にきちんと渡すことができます。