2009-09-18 2 views
0

Я новичок в объективе-C, и у меня много проблем с попыткой добавить новые строки в таблицу. Предполагается, что работа, когда приложение загружает оповещение, запрашивает пользователя, хотят ли они, запускает новую конфигурацию, загружает сохраненную конфигурацию или возобновляет последнюю конфигурацию. Теперь, если они будут выбирать новую конфигурацию, им будет предложено ввести новое имя, и при нажатии на приложение приложение сохранит новую конфигурацию в таблице.Добавление строки в таблицу в Objective-C

Сейчас я могу получить приложение только для хранения одной конфигурации в таблице, но если пользователь попытается создать новую конфигурацию, приложение отключится. Вот что мой код выглядит следующим образом:

- (IBAction) testToAddToList 
{ 
    nameOfConfig = @"Test Name"; //this just bypasses the user from having to enter a name 

    NSMutableArray *array = [[NSMutableArray alloc] init]; 

    [array insertObject:nameOfConfig atIndex:configListDataIndex]; 

    self.configListData = array; 

    [array release]; 

    configListDataIndex ++; 
} 

Я читал много об этом материале, но это не кажется, что это должно быть слишком трудно. Также я чувствую, что главная проблема заключается в том, что «массив» имеет только один индекс, и когда пользователь пытается добавить еще один, что является причиной сбоя приложения.

Может ли кто-то помочь мне помочь и рассказать мне, что я делаю неправильно, и как я могу это сделать правильно? Пожалуйста! ... Или, может быть, просто назовите меня в правильном направлении?

+0

Как он падает - что такое ошибка и что приложение делает на этой линии? – Mark

ответ

2

Проблема, как упоминает Woofy, заключается в том, что вы каждый раз создаете новый массив, а не захватываете ранее созданный массив. Таким образом, первый раз при добавлении в массив, вы в основном делает:

[array insertObject:nameOfConfig AtIndex:0]; 

, но в следующий раз, вы создаете новый (пустой) массив бренда, а переменная configListDataIndex теперь 1, так что вы звоните

[array insertObject:nameOfConfig atIndex:1]; 

и авария, потому что 1 вне пределов для пустого массива. Чтобы решить эту проблему, вы можете сделать что-то вроде:

NSMutableArray *array; 
if (self.configListData != nil) // I know, unnecessary, but I like being explicit with my nil checks. 
    array = self.configListData; 
else 
    array = [NSMutableArray array]; 

Тогда не выпустить его в конце функции (как я полагаю, ваш геттер для configListData является autoreleased или назначения).

Это закрепит crasher. Кроме того, вы всегда можете просто позвонить

[array addObject:nameOfConfig]; 

, который автоматически добавляет объект к концу массива, так что вы можете избавиться от индексной переменной. Но сначала вы должны исправить crasher, так как изменение этой второй части просто скроет ошибку и сделает еще более загадочным, что новая конфигурация просто заменит старую.

+0

Большое спасибо, это то, что мне нужно! – Jeff

2

не было бы намного проще использовать метод -addObject NSMutableArray: вместо insertObject? зачем используя дополнительную переменную (configListDataIndex), когда вы могли бы просто использовать AddObject: nameOfConfig:

[array addObject:nameOfConfig]; 
self.configListData = array; 
[array release]; 

и это все.

И я думаю, что я знаю, почему это сбой ... вы всегда создаете новый объект массива, и каждый раз, когда вы вставляете «nameOfConfig» в другое место в всегда новом пустом массиве. И из-за этого в configListData всегда будет только один объект. Не лучше ли непосредственно редактировать configListData?

+0

Большое спасибо, что мне нужно! – Jeff

 Смежные вопросы

  • Нет связанных вопросов^_^