Как исправить предупреждение arrayWithObject не может быть нулевым?

При запуске анализа в Xcode я получаю это предупреждение:

Аргумент метода «NSArray» «arrayWithObject:» не может быть равен нулю

Строка кода, на которой это происходит для меня:

if (indexPath) {
    indexPath = [self differentPath:indexPath];
}
NSArray *exampleArray = [NSArray arrayWithObject:indexPath];

Который находится внутри метода делегата NSFetchedResultsController.

Как исправить это предупреждение?


person Steve Moser    schedule 06.08.2014    source источник
comment
какая строка кода генерирует это предупреждение?   -  person savner    schedule 06.08.2014
comment
Закрой глаза. Или вы могли бы сказать нам, что на линии было помечено.   -  person Hot Licks    schedule 06.08.2014
comment
Я обновил вопрос строкой кода.   -  person Steve Moser    schedule 06.08.2014
comment
Э-э, это не та строка кода, которая вызывает ошибку.   -  person Hot Licks    schedule 06.08.2014
comment
Этот вопрос не показывает каких-либо исследовательских усилий   -  person ColdLogic    schedule 06.08.2014
comment
@ColdLogic Все в Google для этого предупреждения указывает на нерелевантные ссылки. У вас есть пример релевантной ссылки?   -  person Steve Moser    schedule 06.08.2014
comment
@SteveMoser stackoverflow.com/questions/8797282/object-cannot -be-nil-error   -  person ColdLogic    schedule 06.08.2014
comment
@SteveMoser developer.apple.com/library/mac/documentation/Cocoa/Reference/:   -  person ColdLogic    schedule 06.08.2014
comment
@ColdLogic Обе ссылки относятся к проблемам во время выполнения, а не во время компиляции/статического анализа.   -  person Steve Moser    schedule 07.08.2014
comment
@SteveMoser ответ одинаков для обоих случаев.   -  person ColdLogic    schedule 07.08.2014
comment
(Вы заметили, что в сообщении об ошибке говорится, что аргумент метода 'NSArray' 'arrayWithObjects:' не может быть равен нулю, но вы разместили оператор, который использует arrayWithObject, другой метод. Другими словами, вы не смогли соблюсти номер оператора в сообщении и найти этот номер оператора в своем коде, потратив впустую наше время. Не тот способ, которым можно завоевывать друзей и влиять на окружающих.)   -  person Hot Licks    schedule 07.08.2014
comment
@HotLicks Извините, приношу свои извинения. Я вижу ошибку, и она действительно влияет на вопрос. Спасибо, что указали на это. Я хотел бы скопировать и вставить предупреждение с компьютера моего клиента, но я не могу войти в SO с компьютера моего клиента, поэтому при переписывании с компьютера на мой телефон отсутствует символ.   -  person Steve Moser    schedule 07.08.2014
comment
@ColdLogic Я бы сказал, что ответ не обязательно один и тот же. Например, если этот код находится в библиотеке или среде, вы можете захотеть утверждать, что параметры, входящие в определенные методы, не равны нулю, и поэтому вы должны использовать оператор «если». В противном случае, если это код приложения, который, как вы знаете, никогда не передаст нулевой параметр, вы можете выяснить предупреждение или указать компилятору игнорировать его, если вы знаете, что делаете.   -  person Steve Moser    schedule 07.08.2014


Ответы (1)


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

Сначала вы можете убедиться, что вы устанавливаете указатель на допустимый объект в том же методе, что и вызов arraryWithObject:.

Или вы могли бы обернуть свой вызов arraryWithObject: в оператор if, который проверяет, что ваш объект не равен нулю.

person Steve Moser    schedule 06.08.2014