Отправка NSCFCalendar nil NSDate Sarcastic Ошибка

Несколько потоков здесь обсуждают новую ошибку Xcode iOS 6, которая появляется в консоли при отправке нулевых дат в методы Calendar:

-[__NSCFCalendar components:fromDate:toDate:options:]: fromDate cannot be nil
I mean really, what do you think that operation is supposed to mean with a nil fromDate?
An exception has been avoided for now.
A few of these errors are going to be reported with this complaint, then further 
violations will simply silently do whatever random thing results from the nil.

Ошибка заставила меня немного посмеяться, но заставила меня задуматься....

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

Когда я впервые начал программировать в Objective C, одной из функций, о которых я читал, была отправка сообщений нулевым объектам. Это было здорово, потому что это означало, что мне не нужно беспокоиться о том, чтобы обойти ноль объектов.

Теперь я получил сварливое сообщение об ошибке из Xcode, сообщающее, что я отправил сообщение нулевому объекту.

Является ли теперь вывод, что я должен проверить, что каждый объект не равен нулю, прежде чем использовать его в методах? Я делаю что-то совершенно отвратительное, работая с нулевыми объектами?

2 ответа

Решение

Является ли теперь вывод, что я должен проверить, что каждый объект не равен нулю, прежде чем использовать его в методах?

Нет, это не вывод. Вывод заключается в том, что вы должны проверить ссылку на дату, которую вы отправляете NSCalendar, потому что результат отправки ему нулевой ссылки не определен. В данный момент это может сработать для вас, но Apple может изменить поведение в будущем выпуске, чтобы делать все, что захочет, вплоть до того, что он забил тюленя. О, не могли бы вы подумать о детских тюленях?

Я делаю что-то совершенно отвратительное, работая с нулевыми объектами?

Нет. Это нормально на 100% отправить сообщение получателю, которое может быть равно нулю, если результат, который вы хотите вернуть, равен нулю или нулю в этом случае. В этом случае вы не отправляете сообщение на ноль. Вы отправляете нулевой аргумент получателю, не равному нулю, который этого не ожидал. В одном случае получатель равен нулю; в другом случае аргумент равен нулю.

Теперь я получил сварливое сообщение об ошибке из Xcode, сообщающее, что я отправил сообщение нулевому объекту.

Неправильно. Ваш NSCalendar (получатель) не ноль. какой nil это NSDate вы передаете в качестве одного из аргументов метода. NSCalendar понятия не имею, что делать, когда вы даете ему ноль NSDate, так что вместо сообщения об исключении и сбоя приложения выдается лог-сообщение.

Другие вопросы по тегам