Интерфейсный Разработчик, кэширующий плохие данные (voodoo) - PullRequest
3 голосов
/ 16 января 2009

Иногда IB сохраняет старые или плохие ссылки, и я не могу удалить или отредактировать их.

РЕДАКТИРОВАТЬ Я задал этот вопрос вики с целью сбора дополнительных данных об этом явлении. Приветствуются ответы, касающиеся ситуаций, когда другие кодировщики сталкивались с этим.

Это случилось со мной снова прошлой ночью с контроллером стола. Когда я создал проект с шипами, чтобы попытаться воспроизвести ошибку, система работала так, как я ожидал. Затем в самом проекте плохое поведение продолжалось, даже если я удаляю xib-файл и все задействованные контроллеры.

Создание совершенно нового проекта, в котором ни один из исходных (проблемных) файлов xib и nib не работал правильно.

Этот вопрос не об особенностях этого инцидента, а об этом типе инцидента в IB.

Кто-нибудь знает больше об этом типе плохого поведения IB, и, возможно, о более стильном способе его устранения, чем обстрел проекта?

Обратите внимание, что удаление поврежденных файлов IB и воссоздание их в одном и том же проекте не решало эту проблему для меня в прошлом, только новые проекты.

Также приветствуются ответы, касающиеся примеров того, когда / как этот глюк был обнаружен / создан.

Ответы [ 14 ]

3 голосов
/ 22 сентября 2009

Я исправил этот тип проблемы кэширования, щелкнув Файл> Читать файлы классов ... и указав IB на мои файлы классов. Бинго, он их хорошо прочитал, и все заработало. : -)

1 голос
/ 28 марта 2010

Я обнаружил, что File> Read Class Files исправляет это для одного файла пера, однако, перо не остается в синхронизации с какими-либо будущими изменениями, и это исправление не применяется ни к каким другим файлам в проекте.

Перезапуск и / или чистое здание не помогли, но новые проекты в порядке. Это происходило со мной в Xcode / IB ver 3.2.2 - до сих пор единственным решением было пересоздание кода в новом проекте.

1 голос
/ 25 октября 2009

У меня только что был проект, где это произошло, и я бился головой, пытаясь заставить его правильно обновиться в IB 3.2 (732). Я действительно не хотел переделывать XIB с нуля. Я попытался перетащить файлы * .h, перезапустить, перезагрузить все, и это не сработало. Я также попробовал File-> Read Class Files, которые не работали. Как ни странно, File-> Reload All Class Class Files работал как шарм.

1 голос
/ 17 января 2009

Единственное реальное предложение, которое у меня есть, это подать отчет об ошибке на http://bugreporter.apple.com/ с воспроизводимым проектом в качестве вложения; в моем опыте Apple действительно смотрят на эти вещи. Тем не менее, вы говорите, что воссоздание XIB в том же проекте не исправило ошибку. Как насчет замены другого конца ссылки; заново создать файл заголовка и использовать этот новый заголовок с существующим XIB? Возможно, этого достаточно, чтобы подтолкнуть IB к обновлению своей модели.

0 голосов
/ 22 мая 2013

БЫСТРОЕ ПРОСТОЕ РЕШЕНИЕ: - перезагрузка компьютера не требуется, новый проект не требуется. , .

К сожалению, ни одно из предложений в этом посте не устранило эту проблему для меня (кроме перезагрузки компьютера и запуска нового проекта xcode)

МОЕ РЕШЕНИЕ ... В любом случае, единственное другое быстрое решение (которое работает для меня, по крайней мере, с Perfoce) - это отменить (отменить) мои изменения в моей системе контроля версий. Мы используем Perforce, и это, кажется, работает нормально.

Мне не нужно было создавать совершенно новый проект xcode, не нужно перезагружать компьютер, даже не перезагружать xcode, не нужно вручную удалять файлы или ссылки, не нужно повторно ссылаться на классы, нет мусора и перетаскивания мусора для работы ручные изменения настроек и т. д.

КРУШЕНИЕ ... Если вы какое-то время ходите вокруг xcode и IB и внесли много изменений, а затем внезапно возникает проблема ... тогда вы, конечно, потеряете все в файлах, которые вы возвращаете ... QQ

glhf -Эрик

Боковое примечание ... это довольно плохая ошибка, и она определенно отнимает много времени, особенно если вы впервые сталкиваетесь с этой проблемой (и я уверен, что все здесь понимают, что время необходимо для разработчика). Это первый раз, когда я разочаровался в apple / obj c / xcode (запущен 2 месяца назад), и я чувствую, что это не будет последним: /

0 голосов
/ 08 сентября 2011

Повторное чтение файла проблемного класса решило эту проблему для меня.

0 голосов
/ 09 июля 2010

Только что произошел этот тип инцидента и исправили его, используя рефакторинг XCode для переименования классов в разные имена. Похоже, что перезапустить материал.

0 голосов
/ 26 сентября 2009

У меня возникла такая же проблема. Это происходит, когда я открываю проект, сделанный со старой версией Xcode. Интерфейсный Разработчик не синхронизируется правильно с XCode. Да, я могу вручную обновить кэш IB с помощью «File-> Read Class Files ...», но даже с этим методом мусор остается. Я имею в виду старый IBOutlet и IBAction все еще появляется.

0 голосов
/ 26 июня 2009

У меня была точно такая же проблема с IB, когда я создавал новый проект из старого. Я могу синхронизировать IB с новыми файлами .h, но IB по-прежнему давал удаленные ссылки (из старого проекта), когда я щелкал правой кнопкой мыши по объекту (имя класса «MainController» было одинаковым от старого к новому), даже если ссылки в обновленном коде вообще не существовали.

"Вы не говорите, сохранялась ли проблема при перезапуске, поэтому я думаю, что это может быть следующей проблемой: в процессе сборки Xcode есть редкая ошибка, когда иногда старые версии выходных файлов застряли в папке / tmp и обновляться не будет. IIRC, самое простое решение - очистить цель и перезагрузить компьютер. " Я пытался очистить цель, но она не сработала.

Однако, как только я удалил MainManu.xib и создал новый (потребовалось немного усилий для разработки интерфейса вручную), старые ссылки исчезли.

0 голосов
/ 20 мая 2009

Сохраняете ли вы файлы заголовков? Interface Builder анализирует содержимое ваших заголовочных файлов на диске, а не несохраненные файлы в редакторе Xcode. Если вы добавите розетку в файл заголовка и переключитесь обратно на IB без предварительного сохранения, IB не увидит новую розетку.

...