Добавление объекта в NSMutableArray из UITextField - PullRequest
0 голосов
/ 18 августа 2011

С этим кодом я получаю эту ошибку:

'* - [NSMutableArray insertObject: atIndex:]: попытка вставить ноль объект на 0 '

categories=[[NSMutableArray alloc] init ];
UIAlertView* dialog = [[UIAlertView alloc] init];
    [dialog setDelegate:self];
    [dialog setTitle:@"Category name"];
    [dialog setMessage:@" "];
    [dialog addButtonWithTitle:@"Cancel"];
    [dialog addButtonWithTitle:@"OK"];

    nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
    [nameField setBackgroundColor:[UIColor whiteColor]];
    [dialog addSubview:nameField];

    [dialog show];
    [dialog release];

    [categories addObject:[nameField text]];

    [nameField release];
    [categoryTable reloadData];

Когда я запускаю это в симуляторе, у меня происходит сбой до того, как всплывет окно с предупреждением. Есть идеи?

1 Ответ

1 голос
/ 18 августа 2011

В NSArray будет сгенерировано исключение, если вы попытаетесь добавить объект nil. Сначала проверьте состояние:

if ([nameField text]) [categories addObject:[nameField text]];

EDIT:

Также из вашего кода вам нужно реализовать протокол UIAlertViewDelegate и попытаться добавить ваш объект в ваш массив там. Например:

- (void) showDialog {
    UIAlertView* dialog = [[UIAlertView alloc] init];
    [dialog setDelegate:self];
    [dialog setTitle:@"Category name"];
    [dialog setMessage:@" "];
    [dialog addButtonWithTitle:@"Cancel"];
    [dialog addButtonWithTitle:@"OK"];

    nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
    [nameField setBackgroundColor:[UIColor whiteColor]];
    [dialog addSubview:nameField];

    [dialog show];
    [dialog release];
}


- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {

    if ([nameField text]) [categories addObject:[nameField text]];
    [categoryTable reloadData];

}

Предполагается, что nameField и категории являются iVars, и вам нужно будет освободить их, когда они больше не нужны. Вы также должны проверить, какая кнопка была нажата в методе делегата. HTH Дэйв

...