2010-04-27 7 views
1

все. Из-за этой проблемы я несколько секунд стучал головой. У меня есть универсальный проект, представляющий собой сочетание проектов iPhone и iPad. Я объединил эти кодовые базы в универсальный проект, и после того, как многие из «#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200» проверили, проект был запущен как в iPhone (OS 3.0 до 3.1.3), так и в iPad. После того, как я больше загружаюсь с настройками проекта внешних библиотек, которые я загружаю, я получил приложение для загрузки на iPhone (который работает под управлением ОС 3.1.3).SIGABRT ошибка при работе на iPad

Однако, когда я запускаю приложение на своем iPad, я получаю немедленную ошибку SIGABRT. Я попытался запустить его под Отладка, под Релиз, с Активная архитектура как armv6, так и armv7. Я проверил и дважды проверил, что приложение имеет нужные файлы nib (но, опять же, это приложение отлично работает в симуляторе). Я прошел через внешние библиотеки, которые я использую, и установил их для того же размера базовый SDK (3.2), то же самое архитектуры (оптимизировано (armv6 armv7)), то же самое целевое семейство устройств (iPhone/iPad), и тот же цели развертывания iPhone OS (iPhone OS 3.0).

Итак, подведем итоги ... У меня есть универсальное приложение, которое работает в симуляторе для iPhone и iPad, работает на реальном iPhone, но не работает на iPad. Это далеко не на iPad - есть немедленная ошибка SIGABRT, которая прекращает выполнение. Помогите??

Редактировать По предложению Джейсона ниже, вот стек следов моего приложения:

#0 0x30c8e0a0 in __kill() 
#1 0x30c8e096 in kill() 
#2 0x30c8e088 in raise() 
#3 0x30ca2210 in abort() 
#4 0x32944a22 in __gnu_cxx::__verbose_terminate_handler() 
#5 0x335657ca in _objc_terminate() 
#6 0x32942df4 in __cxxabiv1::__terminate() 
#7 0x32942e48 in std::terminate() 
#8 0x32942f18 in __cxa_throw() 
#9 0x335646aa in objc_exception_throw() 
#10 0x32c91c9c in -[NSException raise]() 
#11 0x32b57db2 in -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:]() 
#12 0x32b1b9da in _NSSetUsingKeyValueSetter() 
#13 0x32b1ae40 in -[NSObject(NSKeyValueCoding) setValue:forKey:]() 
#14 0x32b1adac in -[NSObject(NSKeyValueCoding) setValue:forKeyPath:]() 
#15 0x315db6b6 in -[UIRuntimeOutletConnection connect]() 
#16 0x32c27bc6 in -[NSObject performSelector:]() 
#17 0x32c25a18 in -[NSArray makeObjectsPerformSelector:]() 
#18 0x315d5746 in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:]() 
#19 0x315d53c0 in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:]() 
#20 0x314d5d50 in -[UIApplication _loadMainNibFile]() 
#21 0x314d5a7e in -[UIApplication _runWithURL:payload:launchOrientation:]() 
#22 0x31521962 in -[UIApplication handleEvent:withNewEvent:]() 
#23 0x315212e0 in -[UIApplication sendEvent:]() 
#24 0x31520d2a in _UIApplicationHandleEvent() 
#25 0x30d62b32 in PurpleEventCallback() 
#26 0x32c23d9c in CFRunLoopRunSpecific() 
#27 0x32c234e0 in CFRunLoopRunInMode() 
#28 0x314d54a8 in -[UIApplication _run]() 
#29 0x314d39f2 in UIApplicationMain() 
#30 0x00002f62 in main (argc=1, argv=0x2ffff5d8) 

Как вы можете видеть, это не выходит из основной функции в main.m.

+0

запустить его в отладчике, когда SIGABRT происходит, типа «бть» в консоли , Это должно дать вам место для начала, по крайней мере. Скорее всего, есть какое-то assert(), которое где-то задерживается, что по какой-то причине не работает на устройстве. –

+0

Привет, Джейсон, спасибо за ответ. Я нахожу, что он не выходит из основной функции в main.m. Я обновляю оригинальный пост, чтобы показать, что я вижу. – donkim

+0

FWIW, ваше приложение никогда не «выйдет из основной функции». Это будет в нижней части стека на всю жизнь вашего приложения. –

ответ

2

Похоже, что у вас есть некоторые подключения в главном файле Nib, который указывает на несуществующие выходы в загружаемом коде. Убедитесь, что вы загрузили файл Nib, который соответствует платформе, и который синхронизирован с загружаемым кодом.

Если вы удаляете некоторые выходы в своем коде с помощью #if __IPHONE_..., убедитесь, что у вас нет файла Nib, пытающегося ссылаться на эту розетку.

+0

А, спасибо, Клаус. Ты заставил меня смотреть по правильному пути. Оказывается, мои проверки '' #if __IPHONE _... '" не работают так, как я ожидал. Я хотел использовать их для iPad-специфических классов, чтобы их игнорировали при работе на iPhone. Для чего это стоит, вот что я имел: «#if __IPHONE_OS_VERSION_MIN_REQUIRED> = 30200'» и вот что вам нужно: «' #if __IPHONE_OS_VERSION_MAX_ALLOWED> = 30200' » Арг, такой идиот. Хех, по крайней мере, я понял. :) – donkim

0

Это, вероятно, не поможет с вашей проблемой, но если вы пытаетесь создать универсальный двоичный код, то использование #if не будет работать. Универсальный двоичный должен содержать код как для iPhone и IPad и сделать определение во время выполнения, какие устройства он работает на, например, так:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 

Кроме того, ваша условная компиляция только проверку того, что версия не менее 3,2. Когда iPhone OS 4.0 выпущен для обоих устройств, вы получите код для iPad-only, включенных в сборку iPhone.

+0

Да, мне было интересно об этом. Мне нужно выяснить, как обращаться с такими вещами, как объявление о том, что класс соответствует, например, UIPopoverControllerDelegate. Я надеюсь, что Apple позволит вам объединить отдельные бинарные файлы iPhone и iPad и назвать их «универсальными». – donkim

0

для обработки конкретных классов, попробуйте (Jarad P's Solution) найти в StackOverflow, список которых:


...»рекомендация компании Apple для универсальных приложений в Руководстве по программированию IPad, если вы хотите создать несколько версий ОС с противоречивым APIs, вы должны использовать NSClassFromString и перейти оттуда.Таким образом, вы только должны иметь одну цель (самая низкая ОС вы поддерживаете) и через вне вашего кода есть такие вещи, как

Class mplayerControllerClass = NSClassFromString(@"MPMoviePlayerViewController"); 
if(mplayerControllerClass != nil) { 
    //Code for 3.2, e.g. [mplayerControllerClass alloc] 
} else { 
    //Code for pre-3.2 OSes 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^