Универсальный iPhone / iPad Application Debug Compilation Ошибка для тестирования iPhone

StackOverflow https://stackoverflow.com/questions/2618889

Вопрос

Я написал iPhone и iPad Universal App, которое отлично работает в симуляторе iPad на Xcode, но теперь я хотел бы проверить функциональность iPhone. Я, кажется, не в состоянии запустить симулятор iPhone с этим кодом, так как он всегда по умолчанию для iPad?

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

dyld: Symbol not found: _OBJC_CLASS_$_UISplitViewController
  Referenced from: /var/mobile/Applications/9770ACFA-0B88-41D4-AF56-77B66B324640/Test.app/Test
  Expected in: /System/Library/Frameworks/UIKit.framework/UIKit in /var/mobile/Applications/9770ACFA-0B88-41D4-AF56-77B66B324640/Test.app/TEST

Поскольку приложение создано программно, а не использование XIB, я разбил 2 устройства устройства, используя следующие строки в методе Main.M:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate_Pad");
}
else
{
    retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate_Phone");
}

С этого пункта они используют разные appdelegates, и я проверил мои заголовки, чтобы убедиться, что UISPLITVIVE никогда не используется и не импортируется по телефонной логике.

Как избежать этой ошибки и есть ли лучший способ разделить универсальные логические пути в этом программно созданном приложении?

Это было полезно?

Решение

Эта ошибка запускается, потому что вы не слабая связываете структуру Uikit. Рамки Uikit в iPhone OS 3.2 добавили UISPLITVIVECONTROLLER, и если вы ссылаетесь в его, как обычно, ваше приложение предположит, что эти символы существуют на 3.0, где они этого не сделают.

К слабым ссыланию каркас, найдите цель вашего приложения в XCode, проверьте его и перейдите на вкладку «Общие». В нижней части этой вкладки должен быть список каркасов с столбцом для типа. Измените тип для Uikit от необходимости для слабых и восстановить ваше приложение. Это должно позаботиться о ошибках времени выполнения.

Ваша условная логика - это звук, но я склонен делиться делегатом приложения и выполнить определенную интерфейсную макет вниз по линии.

(Обновление: 12.12.2011) С IOS 4.2 вам больше не нужно необходимость слабых структур связи, чтобы предотвратить так, чтобы ошибки. Так как Марко Арции описывает, если вы строятся с iOS 4.2 или позже и нацеливаются на iPhone OS 3.1+, отдельные классы теперь слабые связаны и должны иметь их +class метод возврата nil Если класс не существует на текущей версии ОС.

Другие советы

У меня была очень похожая ошибка, и она ехала мне орехи! :-) Поиск часов и не мог понять это ...

Как вы сказали, все было хорошо, когда в симуляторе iPad все было хорошо, но при попытке проверить приложение на iPhone с iPhone OS 3.1.2. Это даже не начнется, а сбой со следующим сообщением об ошибке:

mi_cmd_stack_list_fraames не хватает кадров в стеке

Проверяя почти каждую линию кода, я понял, что выделение 3,2 классов, таких как UipoPoverController или UisplitviewController (уже внутри разветвленного iPad-специфического кода) вызывал проблему.

Итак вместо IE:

Infopopover = [[UipoPoverController Alloc] initWithContentViewController: Infonavcontroller];

Я бы написал

Infopopover = [[NSClassfromString (@ «UipoPoverStontroller») alloc] initwithcontentviewcontroller: Infonavcontroller];

И это решило мою проблему! (Отладка может быть настолько сложно, если сообщение об ошибке не дает вам никакой подсказки к тому, где можно найти ошибку ...)

XCode 8.3, iPad 2 (без сетчатки), Swift 3 Code

Что помогло мне было:

  • Перезапустите XCode.
  • сделать продукт -> чистый СдвигКомандаK.
  • Восстановить проект
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top