NSMutableArray: addObject "nil"? - PullRequest
       1

NSMutableArray: addObject "nil"?

8 голосов
/ 16 июля 2011

У меня возникают проблемы с добавлением «nil» в конце массива, я получаю «NSInvalidArgumentException»?

NSMutableArray *k = [NSMutableArray arrayWithCapacity:10];

for (int i=0; i<9; i++){
    [k addObject: @"blank"];
}
[k addObject: nil]; //<-- NSInvalidArgumentException

Мне нужно сделать весь этот элемент за элементом в цикле, а затем добавить "nil ".

Спасибо

(Затем я беру этот массив и инициализирую двумерный массив. Проблема в том, что я не могу успешно" replaceObjectAtIndex "с массивом без" nil ". ЕслиЯ строю "k" с помощью "initWithObjects: @" blank ", @" blank ", @" blank ", ... nil", это будет работать. Однако написание 1000 пробелов - это немного. Так что это цельloop.)

////// ЗДЕСЬ КОД ОТ ИСПОЛЬЗОВАНИЯ И ОШИБКИ для инициализации и построения 2D-матрицы с целью чтения и сохранения матрицы из "файла CSV" //////

///*
NSMutableArray *ppp = [NSMutableArray arrayWithCapacity:2];
NSMutableArray *kkk = [NSMutableArray arrayWithCapacity:20];

NSNull *myNull = [NSNull null];
for (int i=0; i<9; i++) {
    //[kkk addObject: [NSMutableString stringWithFormat: @"%d",i]];
    [kkk addObject: myNull];
}
//[kkk addObject: nil];

[ppp addObject:kkk];
[ppp addObject:kkk];
//*/


/*
// this is successful --> just uncomment this block and comment out the block above
[ppp addObject:[[NSMutableArray alloc] initWithObjects:
             @"z1",
             @"z2",
             @"z3",
             @"z4",
             @"z5",
             @"z6",
             @"z0gg",
             @"z0hh",
             @"z0ii",
             @"z0jj",
             nil
             ]];

[ppp addObject:[[NSMutableArray alloc] initWithObjects:
        @"a1",
        @"b2",
        @"c3",
        @"d4",
        @"e5",
        @"f6",
        nil
        ]];

* /

[[ppp objectAtIndex:0] replaceObjectAtIndex:1 withObject:@"HOTDOG"];
[[ppp objectAtIndex:1] replaceObjectAtIndex:1 withObject:@"HOHO"];
// HOHO will replace HOTDOG as well for the code not using "nil"

Ответы [ 3 ]

13 голосов
/ 16 июля 2011

Вы не можете добавить nil к NSMutableArray, и вызовет исключение, если вы попытаетесь .

Есть NSNull, однако:

NSNull *myNull = [NSNull null];
[myMutableArray addObject:myNull];

Однако вы можете спросить себя, почему вы пытаетесь это сделать.

9 голосов
/ 16 июля 2011

Вам не нужен ноль в качестве последнего элемента в массиве.

Не путайте себя с переменными методами, такими как +arrayWithObjects:, которые получают гибкое количество аргументов, а затем должны найти, какой из них был последним. Это связано с тем, что в реализации этих методов (как и в переменных функциях C) вы не можете получить количество переданных аргументов, поэтому nil отмечает конец.


Как правило, вы можете вкладывать петли в том же количестве, что и ваши размеры. В вашем случае это будет заполнять «2D» массив различными объектами:

NSMutableArray *array = [NSMutableArray array];
int i,j;

for (i = 0; i < 2; ++i) {
    NSMutableArray *s_array = [NSMutableArray array];
    [array addObject:s_array];
    for (j = 0; j < 8; ++j) {
        [s_array addObject:[NSString stringWithFormat:@"%d%d", i, j]];
    }
}
2 голосов
/ 16 июля 2011

Вы не можете добавить ноль .. (и вам не нужно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...