Приложение вылетает на симуляторе, но работает нормально на iPod 3.1.3. Метод init класса Super не срабатывает (даже при отладке), когда приложение запускается в симуляторе - PullRequest
0 голосов
/ 13 ноября 2010

Все это может показаться слишком тривиальным, но прочитать его -

У меня есть простой класс (A) и суперкласс (B).У меня есть методы init на обоих (назначенный инициализатор initWithData для A и обычный (id) init для B).У меня есть делегат, определенный на моем супер (B), который вызывается [instanceofA setDelegate: self].И, конечно, у меня есть следующая строка кода - @interface A:B { //declarations }

Поэтому, когда я запускаю свое приложение на симуляторе iphone (версия 3.2), вызов для установки делегирования запуска завершается неудачно с сообщением "- [A setDelegate:]:нераспознанный селектор отправлен на экземпляр 0x4c59e10 ", и поэтому приложение вылетает

Когда я отлаживаю свое приложение, вызов [super init] в инициализаторе для A не вызывает его супер, то есть B (даже если я сохраню указатель отладкив методе инициализации B)

Все это работает абсолютно нормально, если я запускаю приложение на своем iPod (SDK 3.1.3) - даже точки отладки достигают

ДляПо какой-то причине во время выполнения симулятор не может найти суперкласс класса А, который является B.

Я уже пытался сбросить «Содержимое и настройки» на моем iPhone Simulator, но безрезультатно.Я также несколько раз пытался восстановить, пометил все мои классы как "затронутые".Ничего не работаетЭто проблема с очисткой существующих целей?Как мы очищаем цели в XCODE?

Я не уверен, обсуждается ли здесь актуальная, но немного похожая проблема - [/2406434/prilozhenie-vyletaet-na-simulyatore-rabotaet-na-ustroistve-iphone][1]

Обновление!

Я знаю проблему - пожалуйста, не обращайте внимания на все вышеперечисленное.Проблема связана с этим сообщением (которое отображается на моей консоли отладчика - хотя и не как предупреждение) -

objc [34514]: Class Connection реализован в обоих /Developer/Platforms/iPhoneSimulator.platform/Разработчик / SDKs / iPhoneSimulator3.1.3.sdk / Система / Библиотека / PrivateFrameworks / Message.framework / Сообщение и / Пользователи / admin1 / Библиотека / Поддержка приложений / iPhone Simulator / 3.1.3 / Приложения / xxxyyyyzzzzbbbbb / MyApp.app / MyApp.Один из двух будет использован.Какой из них не определен.

, поэтому я удаляю "messageUI.framework" и удаляю все мои ссылки на него в моем коде, например, MFMailComposeViewController, canSendMail и т. Д., И все возвращается к нормальной жизни.Я должен был знать, что это был мой последний набор реализаций.На самом деле я не проводил никаких модульных тестов и поэтому не осознавал этого, когда начал тестировать свое приложение.

Я, конечно, гуглил и наткнулся на следующий URL - groups.google.com/group/objectiveresource/tree/browse_frm / month / 2009-07 / d8b3f3664c39785b? rnum = 1 & _done =% 2Fgroup% 2Fobjectiveresource% 2Fbrowse_frm% 2Fmonth% 2F2009-07% 3F

, который ссылается на - groups.google.com/group/objectivethourcebthread / 349756a5e01eb8b1 / 8712f5fde9e9b47c? lnk = gst & q = prefix # 8712f5fde9e9b47c

Каковы рекомендации, связанные с именами классов, для цели C?Любой онлайн-ресурс (apple / non apple), в котором рассказывается о том, как избежать конфликтов имен классов?А пока я попытаюсь выяснить, какой мой класс вызывает этот конфликт ...

Ответы [ 2 ]

0 голосов
/ 16 ноября 2010

В ответ на ваш пересмотренный вопрос в Objective-C отсутствуют пространства имен, поэтому вы видите столкновения, подобные тем, которые произошли в вашем случае. Вот почему принято использовать двух- или трехбуквенные префиксы перед именами пользовательских классов (например, что-то вроде SBHConnection могло бы избежать этой проблемы в вашем случае).

См. Вопрос " Каков наилучший способ решить коллизию пространства имен Objective-C? " для подробного обсуждения этого, хотя это отклоняется от более технической территории. См. Стиль Какао Скотта Стивенсона для Objective-C для более практичного объяснения некоторых элементов стиля, которые вы обычно будете видеть в приложениях Touch Cocoa и Cocoa.

0 голосов
/ 15 ноября 2010

это класс с именем "Connection" в моем классе, а также в messageUI.framework .. я должен читать вещи более внимательно !!

Ответ был прямо передо мнойвремя!!Я думаю, это всегда так ...

...