Я новичок в Xcode 4.2 и задал вопрос о массиве раскадровки. Я делаю учебник под названием DrinkMixer, но кодирую его с помощью Storyboard вместо традиционного подхода XIB.Xcode 4.2 - Losing Array Objects
Это приложение использует навигационный контроллер, табличный вид (MasterViewController), который подталкивается к подробному представлению (DetailViewController) и представлению add-drink (AddDrinkViewController), представленному в моделях.
Настольный вид (выберите напиток со стола) и подробный вид (показывает подробную информацию о выбранном напитке) отлично работает. Но когда я пытаюсь добавить новый напиток и нажимаю кнопку «Сохранить», модальный вид уходит правильно, но представление таблицы не обновляется новым напитком.
Я создал ссылку на мой drinkArray в MasterViewController и подумал, что будет поддерживать мой массив, когда я положу новый напиток с помощью addObject, но где-то я пропускаю лодку. Точки останова в MasterViewController показывают, что у меня изначально было 40 объектов в моем напиткеArray, но когда я добираюсь до AddDrinkViewController, у drinkArray есть 0 объектов.
Кто-нибудь знает, почему мой drinkArray теряет свои объекты? Заранее благодарю за любой совет!
Вот мой код ...
MasterViewController.h
#import <UIKit/UIKit.h>
@interface MasterViewController : UITableViewController {
NSMutableArray *drinks;
}
@property (nonatomic, retain) NSMutableArray *drinks;
@end
MasterViewController.m
#import "MasterViewController.h"
#import "DetailViewController.h"
#import "AddDrinkViewController.h"
#import "DrinkConstants.h"
@implementation MasterViewController
@synthesize drinks;
@synthesize masterUIView;
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkDirections" ofType:@"plist"];
drinks = [[NSMutableArray alloc] initWithContentsOfFile:path];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView reloadData];
}
.
.
.
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"SegueAddDrink"]) {
AddDrinkViewController *addViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"AddDrink"];
addViewController.drinkArray = self.drinks;
}
}
AddDrinkViewController.h
#import <UIKit/UIKit.h>
@interface AddDrinkViewController : UIViewController {
BOOL keyboardVisible;
NSMutableArray *drinkArray_;
}
- (void)keyboardDidShow:(NSNotification *)notif;
- (void)keyboardDidHide:(NSNotification *)notif;
@property (nonatomic, retain) NSMutableArray *drinkArray;
@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;
@property (nonatomic, retain) IBOutlet UITextField *nameTextField;
@property (nonatomic, retain) IBOutlet UITextView *ingredientsTextView;
@property (nonatomic, retain) IBOutlet UITextView *directionsTextView;
- (IBAction) save: (id) sender;
- (IBAction) cancel: (id) sender;
@end
AddDrinkViewCont roller.m
#import "MasterViewController.h"
#import "AddDrinkViewController.h"
#import "DrinkConstants.h"
@implementation AddDrinkViewController
@synthesize drinkArray = drinkArray_;
@synthesize scrollView;
@synthesize nameTextField;
@synthesize ingredientsTextView;
@synthesize directionsTextView;
.
.
.
- (IBAction) save: (id) sender {
// Create a new drink dictionary for the new values.
NSMutableDictionary *newDrink = [[NSMutableDictionary alloc] init];
[newDrink setValue:self.nameTextField.text forKey:NAME_KEY];
[newDrink setValue:self.ingredientsTextView.text forKey:INGREDIENTS_KEY];
[newDrink setValue:self.directionsTextView.text forKey:DIRECTIONS_KEY];
[drinkArray_ addObject:newDrink];
// Remove the modal view and go back to the table view.
[self dismissModalViewControllerAnimated:YES];
}
Это был билет! Прекрасно работает. Спасибо SOOOOOO много !!! – JimVision