Есть два метода с именем dequeueReusableCell
.
Но развертывание не выполняется и приложение вылетает , tableView.dequeueReusableCell по какой-то причине возвращает nil ....
Вы используете первый, и документ четко говорит
Возвращаемое значение
Объект
blockquote>UITableViewCell
со связаннымidentifier
илиnil
, если такого объекта нет существует в очереди многоразовых ячеек.Вы можете использовать последнее. Измените строку:
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom") as! CustomCell
На:
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom", for: indexPath) as! CustomCell
Прямо сейчас я обоснован на решении, вдохновленном ответом Andy White:
Оборотная сторона:
Я думаю, что обычная практика для AssemblyInfo.cs должна просто генерировать его динамично как часть процесса сборки, вместо того, чтобы иметь в наличии статический файл.
Путем генерации можно использовать любые произвольные / конфигурируемые параметры, которые Вы хотите.
Я полагаю, что NAnt имеет <asminfo>
задача с этой целью. Я предполагаю, что существует что-то подобное для MSBuild также. Или Вы могли просто записать пользовательский сценарий поколения файла и использовать его для пихания пользовательского AssemblyInfo.cs в сборку.
Если Вы не проверяете возвращенный AssemblyInfo.cs в управлении исходным кодом, то, почему там шум?
Я рекомендовал бы использовать единственное значение AssemblyFileVersion для всей сборки, и что Вы любая регистрация единственного файла, содержащего ту версию, и/или, маркируете сборку номером версии. Тем путем Вы не будете чувствовать потребность зарегистрироваться, несколько изменили файлы AssemblyInfo.cs.
Мы только обновляем AssemblyInfo на соединительной линии после RTM/RTW/GA / (Безотносительно:) сборка конечных версий.
Наша Ночная/бета/RC/QA / (Безотносительно:) сборки просто делают копию обновленного AssemblyInfo.cs (из рабочей копии на сервере CI) в их соответствующее ответвление или тег. Мы используем Подверсию, и можно перейти/отметить на рабочей копии с незафиксированными изменениями.
Это позволяет нам сохранять обоих правильной версией AssemblyInfo для Ночной / Бета-сборки в ответвлении или теге, и только сенсорного AssemblyInfo в соединительной линии после того, как финальная версия произошла. Сервер сборки имеет переключатель, чтобы сказать этому передавать это для транкинга на этом типе сборки.
FWIW, мы управляем всем этим из сценариев MSBuild, с помощью различных значений для набора свойств для каждого типа проекта, через который проходят с нашего сервера сборки (CruiseControl.NET).
[РЕДАКТИРОВАНИЕ] Также отмечает, что версия разработчика AssemblyInfo не обновляется (если они вручную не изменяют его), таким образом, они не получают шум измененного AssemblyInfo на каждой сборке. Мы позволяем разработчикам управлять Главный. Незначительный, Сборка управления сервером сборки, и мы оставляем Пересмотр для QA для соединения с их собственной системой (потому что это проигнорировано WiX/MSI так или иначе).
We also use a generation step to create the AssemblyInfo.[cs|vb] files, though we simply use a template copy of the file as the source, and then a small Perl script to parse that template, replace the version string, and generate the final output.
The problem with this system is that VB projects seem to constantly load the AssemblyInfo file, which means that the project will have an error when it first loads, even before the PreBuild step can run to create the AssemblyInfo.vb file. We haven't found a solution to that problem yet - if anyone has insight, I'd love to hear it...