Курс Stanford cs193p Fall 2011 допустил ошибку в лекции 9?

В лекции 9 учитель сказал, что метод numberOfSectionsInTableView: возвращает 1 по умолчанию, но когда я создал свой собственный проект, я обнаружил, что он возвращает 0 по умолчанию, и это привело к тому, что моя ячейка табличного представления исчезла! Я нашел, где была проблема, и исправил ее, сделав numberOfSectionsInTableView: return 1, проблема исчезла. Значит, Стэнфорд ошибся?

Когда я добавил новый подкласс UITableViewController в файл .m, Xcode сгенерировал следующий код:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 0;
}

Кстати, я использую Xcode 4.3.3...


person longbow    schedule 14.08.2012    source источник
comment
Есть код (обоих)? В C или Obj-C нет возвращаемого значения по умолчанию.   -  person    schedule 14.08.2012
comment
Нет непогрешимых людей.   -  person Alexey Frunze    schedule 14.08.2012
comment
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { #warning Потенциально неполная реализация метода. // Возвращаем количество секций. вернуть 0; }   -  person longbow    schedule 14.08.2012


Ответы (3)


Вы неправильно поняли, что означает значение по умолчанию. Когда Apple, учитель или кто-то упоминает, что возвращаемое значение по умолчанию для метода является чем-то, это означает, что всякий раз, когда этот метод НЕ реализован, он будет вести себя таким образом.

Когда вы написали свой собственный метод, вы вернули значение 0. Если вы используете шаблон, то этот шаблон перезаписывает метод, чтобы установить его на 0. Если вы хотите поведение по умолчанию, просто удалите метод.

В большинстве случаев такие методы делегата имеют значения по умолчанию. Нажмите Control на реализацию делегата в заголовочном файле, и вы увидите методы @Optional, которые в большинстве случаев имеют значения по умолчанию.

person Pochi    schedule 14.08.2012
comment
Да, теперь я понимаю. Спасибо! - person longbow; 14.08.2012

Я считаю, что под «по умолчанию» они подразумевают, что если ваш UITableViewDataSource не реализует numberOfSectionsInTableView:, то предполагается значение 1. Шаблон Xcode может включать приведенный выше код (возвращающий 0), но это не то же самое, что и фреймворк по умолчанию.

person Ben Cochran    schedule 14.08.2012
comment
Итак, я должен просто удалить код выше, и тогда проблема исчезнет? Довольно просто. Спасибо! - person longbow; 14.08.2012
comment
Да, но обычно приятно явно указывать такие вещи в коде. - person Ben Cochran; 14.08.2012

Боюсь, наш друг из Стэнфорда прав. Значение по умолчанию — 1. Я редко включаю этот метод. Просто чтобы быть уверенным, я проверил это, удалив метод из приложения, над которым я работаю, и, конечно же, только 1 раздел. Я разработал приложения от версии 1.0 до текущей версии.

Убедитесь, что ваш делегат настроен на правильный класс. И убедитесь, что ваш xib имеет правильное имя класса для владельца файла. Это один получает меня время от времени.

person Brainware    schedule 14.08.2012