Как исправить проект, который fubar’d-Разработчик интерфейса

#interface-builder #xcode4

#interface-builder #xcode4 #конструктор интерфейсов

Вопрос:

Помогите мне отменить создание интерфейса fubar в XCode4.

Я создал кнопку в interface-builder и определил для нее метод IBAction в коде представления. Все прошло нормально. Затем я переименовал метод действия кнопки с помощью инструмента рефакторинга / переименования XCode. Все прошло нормально.

Затем я удалил кнопку в interface-builder, выбрав кнопку и нажав клавишу delete. Когда я перестроил проект, кнопка все еще была там, в симуляторе. Вернувшись в interface-builder, кнопка исчезла. В коде нет ссылки на кнопку, но метод IBAction кнопки все еще существует.

Что еще хуже, вызывается исходный метод действия кнопки, который, конечно, выдает исключение во время выполнения из-за того, что селектор не найден. Когда я выполняю поиск проекта по имени исходного метода действия, ничего не найдено, но среда выполнения все еще пытается его вызвать. Я сделал «чистку» и перестройку, но без радости.

Если я попытаюсь открыть файл .xib в виде списка свойств ASCII, он сообщит мне, что данные были повреждены. (Я это понял.)

Есть ли какой-нибудь способ исправить это, кроме удаления файла .xib и создания нового представления?

И что делает «clean», если он не удаляет двоичные файлы?

Спасибо за вашу помощь!

Комментарии:

1. Если вы открываете файл .xib в текстовом редакторе, вы видите что-нибудь странное?

2. @Джон Рид — файл .xib в текстовом редакторе выглядит нормально. Похоже, что объекты в xml-представлении xib были такими же, как объекты в графическом представлении в Interface Builder. Каким-то образом XCode где-то цепляется за устаревшую ссылку.

3. После попытки воспроизвести это, я полагаю, это было вызвано моим переименованием файла .xib (о котором я забыл упомянуть, когда публиковал исходный вопрос, извините.) Я использовал инструмент XCode «Рефакторинг» для переименования некоторых моих объектов, но я не вижу, как переименовать файл xib с помощью рефакторинга, поэтому я просто переименовал его в навигаторе проекта. Вероятно, это не очень хорошая идея.

4. А, ладно. В переименовании xibs нет ничего плохого — вам просто нужно продублировать изменение, в котором указаны имена (либо в коде, либо в других xibs).

Ответ №1:

Попробуйте iOS Simulator -> Сбросить содержимое и настройки. (Чтобы сэкономить время, Xcode пытается скопировать ресурсы перед запуском, только если эти ресурсы изменились, но если что-то пошло не так …)

Комментарии:

1. хороший совет. Я не думаю, что это вызвало мой fubar. После попытки воспроизвести проблему, я думаю, что это было вызвано моим переименованием одного из моих файлов .xib.

2. Это довольно старое, но, похоже, все еще происходит. Только что был XIB, который ничего не изменил из того, что я делал (добавление кнопок, настройка целей, текстов …). Помогло удаление приложения из симулятора.

Ответ №2:

Очистка у меня не сработала. По моему опыту, Xcode хранит кэш «compiled .xib» без учета временных меток (попробуйте заменить xib на один с тем же именем). Мое исправление заключалось в изменении каждого представления, которое требовало обновления. Очень неприятно, но это работает.

Ответ №3:

Попробуйте зайти в Xcode, чтобы Создать> Очистить все цели, это должно исправить

Комментарии:

1. да, я пробовал очистить, но безрезультатно. (Кстати, в XCode 4 нет меню сборки. Очистить находится в меню продукта, и нет опции Очистить все. Я предполагаю, что по умолчанию все очищено.)