Xcode Interface Builder падает при редактировании раскадровки

Я новичок в Xcode, и у меня возникают проблемы с сбоем IDE при использовании Interface Builder. Это Xcode 4.5.

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

Если я не пытаюсь редактировать раскадровку, проект не будет создавать и запускать на симуляторе.

Я вставил, что похоже на соответствующую часть отчета о сбое ниже. Чтобы сэкономить место, я удалил все из раздела "иерархия представлений" вниз, но я могу добавить его, если он будет полезен. Все отчеты о сбоях относятся к той же ошибке.

Интересно, когда я смотрю на журнал Console, перед каждым из этих сбоев появляется еще один отчет от Interface Builder:

25/09/2012 10:46:35.661 Interface Builder Cocoa Touch Tool: CFPreferences:
user home directory at file://localhost/Users/me/Library/Application Support/
iPhone Simulator/User/ is unavailable. User domains will be volatile.

Правильно - этот каталог не существует. У меня есть iPhone Simulator/6.0, но больше ничего. Я зарегистрирован как пользователь в этом пути.

Основываясь на других предложениях по переполнению стека и в других местах, я пробовал очистить сборку, а затем удалил весь каталог iPhone Simulator и позволил симулятору воссоздать его, но это не имеет никакого значения.

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

Означает ли это, что что-то испортилось в моем другом проекте?

Любые предложения были бы очень желанными. Это не важный проект - я изучаю свой путь на этом этапе, но если что-то вызывает проблемы, я хочу разобраться, прежде чем начать серьезную работу в Xcode.

Спасибо заранее.

Джеймс

Process:         Xcode [650]
Path:            /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier:      com.apple.dt.Xcode
Version:         4.5 (1839)
Build Info:      IDEApplication-1839000000000000~3
App Item ID:     497799835
App External ID: 10747437
Code Type:       X86-64 (Native)
Parent Process:  launchd [129]

Date/Time:       2012-09-25 10:46:43.202 +0100
OS Version:      Mac OS X 10.7.5 (11G56)
Report Version:  9

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

Application Specific Information:
ProductBuildVersion: 4G182
ASSERTION FAILURE in /SourceCache/IDEInterfaceBuilderCocoaTouch/IDEInterfaceBuilderCocoaTouch-1926/IBPlugin/Utilities/IBObjectMarshalling.m:651
Details:  Failed to arbitrate IBNSLayoutConstraint, IBUIButton, IBUILabel, IBUIView, and IBUIViewController.

Interface Builder encountered an error communicating with the iOS Simulator. If you choose to file a crash report or radar for this issue, please check Console.app for crash reports for "Interface Builder Cocoa Touch Tool" and include their content in your crash report.

Exception name: IBAssertionFailure
Exception reason: ASSERTION FAILURE: 
Reason:     All views needing candidate constraints have already had constraints generated. This most likely indicates a bug involving layout of the following views:
Layout engine frame ({{20, 60}, {282, 57}}) of <UILabel: 0xb36f590; frame = (20 60; 281 57); text = '0'; clipsToBounds = YES; opaque = NO; autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xb36f620>> does not match canvas frame ({{20, 60}, {281, 57}})
Layout engine frame ({{236, 328}, {66, 43}}) of <UIRoundedRectButton: 0xb384590; frame = (236 328; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb384660>> does not match canvas frame ({{236, 328}, {65, 43}})
Layout engine frame ({{236, 124}, {66, 43}}) of <UIRoundedRectButton: 0xb38ea10; frame = (236 124; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb38eae0>> does not match canvas frame ({{236, 124}, {65, 43}})
Layout engine frame ({{236, 175}, {66, 43}}) of <UIRoundedRectButton: 0xb390a30; frame = (236 175; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb36e8e0>> does not match canvas frame ({{236, 175}, {65, 43}})
Layout engine frame ({{236, 226}, {66, 43}}) of <UIRoundedRectButton: 0xb392a90; frame = (236 226; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb392b60>> does not match canvas frame ({{236, 226}, {65, 43}})
Layout engine frame ({{236, 277}, {66, 43}}) of <UIRoundedRectButton: 0xb394b70; frame = (236 277; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb394c40>> does not match canvas frame ({{236, 277}, {65, 43}})

Ответ 1

Обновление. Дальнейшие эксперименты показали флажок "Использовать автозапуск" для раскадровки. Если вы отключите его, то сохранение файла, похоже, устранило проблему. Я могу редактировать по желанию, без каких-либо сбоев.

Ответ 2

Когда xib файлы находятся в разных форматах, но все они находятся в одном проекте, это произойдет. В моем случае некоторые xib файлы были совместимы для xcode5 dp, но другие были для xcode 4.6

Объект здесь - искать различия в xib файлах

Надеюсь, это поможет людям в будущем!

Ответ 3

Эта проблема, вероятно, имеет какое-то отношение к двум разным размерам iPhone Retina (3,5 "и 4" ), и как это взаимодействует с режимом View: Scale To Fill и, возможно, Autosize Subviews, - оба из которых являются по умолчанию.

Например, в моем случае у меня был 4 "сетчатый размер MainView с плотно упакованными представлениями кнопок, но эмулятор был настроен на 3.5 отображения сетчатки. Поскольку мои представления кнопок были размером 43x43px и расположены рядом друг с другом, это приведет к тому, что позиции кнопок будут автоматически масштабироваться таким образом, чтобы они перекрывались, когда их позиции были скорректированы для 3,5-дюймового дисплея (Scale To Fill the less space) - поскольку они не могли уменьшаться по размеру. Такое перекрытие представлений, похоже, создает проблемы в системе автоматического макета. Следовательно, крушение, я думаю.

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

Ответ 4

Я тоже получил эту ошибку, для меня проблема была в TableView, у которого были некоторые ограничения. После удаления всех ограничений ошибка перестала отображаться.