Отсутствует страж в вызове функции? - PullRequest
2 голосов
/ 15 июля 2011

Не уверен, почему я получаю "Отсутствует страж в вызове функции?"

NSMutableArray *kkk = [NSMutableArray arrayWithObjects: @"a", @"b", @"cat", @"dog", nil];
ppp = [NSMutableArray arrayWithCapacity:3];
[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk]]; // <<--- Missing sentinel in function call
[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk, nil]]; //<<--- change, but it falls out

NSLog(@"Working: %@   %@", [[ppp objectAtIndex:0] objectAtIndex:3], [[ppp objectAtIndex:0] objectAtIndex:2] );

Ответы [ 2 ]

6 голосов
/ 15 июля 2011

initWithObjects: должен заканчиваться трейлингом nil.Поскольку это один объект, вы должны иметь возможность использовать initWithObject:.Тем не менее, вы будете пропускать массив, как это.Выполните

[ppp addObject:[NSMutableArray arrayWithObject:kkk]];

Существует еще одна проблема с фрагментом кода:

NSMutableArray *kkk = [NSMutableArray arrayWithObjects: @"a", @"b", @"cat", @"dog", nil];
ppp = [NSMutableArray arrayWithCapacity:3];
[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk, nil]];

Вы создаете трехмерный массив.Так что

NSLog(@"Working: %@   %@", [[ppp objectAtIndex:0] objectAtIndex:3], [[ppp objectAtIndex:0] objectAtIndex:2] ); 

не так.

NSLog(@"Working: %@   %@", [[[ppp objectAtIndex:0] objectAtIndex:0] objectAtIndex:3], [[[ppp objectAtIndex:0] objectAtIndex:0] objectAtIndex:2] );

должен регистрировать правильные значения.

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

[ppp addObject:kkk];
4 голосов
/ 15 июля 2011

Вам необходимо добавить nil как последний объект в списке.

[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk, nil]];

По сути, он говорит методу прекратить поиск других объектов. Без этого он может смотреть на плохой указатель и вылетать.

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