2013-08-06 3 views
2

Из массива я хочу создать новый изменяемый массив, содержащий все элементы, соответствующие определенным критериям. Это не проблема. Проблема заключается в проверке, является ли массив пустым.ios проверить, имеет ли массив объект

if (!theDates]) {/*do something*/} 

он возвращается положительный независимо, поскольку измененный массив был создан. Но

if (![theDates objectAtIndex:0]) 
    { 
     /* nothing got added to the array, so account for that */ 
    } 
    else 
    { 
     /* do something with the array */ 
    } 

Он падает.

+0

Если вы нашли решение в одном из ответов, не забудьте принять его, чтобы удалить свой вопрос из раздела Unanswered. –

ответ

5

Это сбой, потому что, хотя вы выделили свой массив, он по-прежнему пуст. Строка [theDates objectAtIndex:0] пытается получить доступ к первому объекту массива, и из-за того, что у вашего массива еще нет ни одного, он будет аварийно завершен.

Чтобы проверить целостность вашего массива, просто сделать это:

if (theDates.count > 0) 
{ 
    //Do something 

    id object = theDates[0]; //this for sure won't crash 
} 
+1

Вам не нужна первая половина чека. Просто сделайте 'if (theDates.count) {' – rmaddy

+0

Вы правы. В раннем возрасте доступ к значению нулевого указателя приведет к сбою, это уже не нужно –

+0

Вам даже не нужно '> 0' для этой проверки. Конечно, это не так, но это не нужно. – rmaddy

1

Использование [theDates count] > 0. Вы получаете доступ к несуществующему элементу, поэтому он будет сбой, когда он будет пустым.

0

if (theDates != nil){ if (theDates.count > 0){ 'do something' } }

Это следует проверить нулевой массив затем проверить пустой массив, который предотвращает NullPointerException возникает

+2

Вам не нужен первый оператор 'if'. И стандартное соглашение использует 'nil', а не' null' при работе с указателями объектов Cocoa/Cocoa-touch. – rmaddy

+0

Ooops, я забыл переключить свой условный образ мышления с java на Obj-C, измененный –

0

Или вы могли бы использовать метод lastObject который будет возвращать ноль, если массив пуст

if (![theDates lastObject]) { do something } 
0
if((theDates!=nil) && (theDates.count > 0)) 
{ 
    //We have and existing array and something in there.. 
} 
0

Это будет работать нормально ..

if (!URarray || !URarray.count){ 
    // write code here 
} 
Смежные вопросы