Сбой приложения на контроллере presentmodalview - PullRequest
1 голос
/ 15 января 2012

Это странно .. Мое приложение работало хорошо, прежде чем я продублировал цель для создания платной версии своего приложения. Когда я хочу показать UIViewController, он загружается и отображается, но мое приложение вылетает и выдает эта ошибка в журнале устройства:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x341c2fbc objc_msgSend + 16
1   UIKit                           0x3735fdfe -[UINavigationController topViewController] + 46
2   UIKit                           0x37395ae4 -[UINavigationController viewDidDisappear:] + 80
3   UIKit                           0x373636ae -[UIViewController _setViewAppearState:isAnimating:] + 138
4   UIKit                           0x373beaea -[UIViewController _endAppearanceTransition:] + 258
5   UIKit                           0x373ecec8 -[UIViewController endAppearanceTransition] + 16
6   UIKit                           0x3741cf04 -[UIWindowController transitionViewDidComplete:fromView:toView:] + 1404
7   UIKit                           0x373bc934 -[UITransitionView notifyDidCompleteTransition:] + 140
8   UIKit                           0x373bc7b8 -[UITransitionView _didCompleteTransition:] + 896
9   UIKit                           0x37336814 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 464
10  UIKit                           0x3733bfb2 -[UIViewAnimationState animationDidStop:finished:] + 46
11  QuartzCore                      0x34a8dba0 CA::Layer::run_animation_callbacks(void*) + 196
12  libdispatch.dylib               0x36bace86 _dispatch_main_queue_callback_4CF$VARIANT$up + 190
13  CoreFoundation                  0x33f4b2d6 __CFRunLoopRun + 1262
14  CoreFoundation                  0x33ece4d6 CFRunLoopRunSpecific + 294
15  CoreFoundation                  0x33ece39e CFRunLoopRunInMode + 98
16  GraphicsServices                0x30752fc6 GSEventRunModal + 150
17  UIKit                           0x3734f73c UIApplicationMain + 1084
18  MyApp                       0x00002674 main (main.m:15)
19  MyApp                       0x00002624 start + 32

Где моя ошибка? Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 15 января 2012

Это похоже на доступ к объекту зомби, только на его лице.Не уверен, почему однократное дублирование цели может вызвать это, но вы пробовали профилировать свое приложение с помощью инструмента Зомби в симуляторе?

РЕДАКТИРОВАТЬ:

Да.Хорошо, теперь вы знаете, что происходит.Опять же, мне трудно представить, как простое дублирование цели может привести к этому.Объект, который должен быть сохранен, не сохраняется.Причин может быть несколько, но одной из возможных причин является @property, который должен быть объявлен retain или copy, но объявлен assign.Инструмент Зомби может помочь вам в дальнейшем:

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

Что может быть полезно в этом списке, так это узнать, кто создал объект, потому что обычно это будет логический «владелец» объекта (или он передаст его логическому владельцу).Я хотел бы пройтись по своему проекту и подумать о предполагаемом владении данным объектом.Кто должен владеть этим объектом?Почему они не сохраняют его?

Если вы все еще быстро справляетесь с управлением памятью Какао, я рекомендую прочитать руководство Apple: Расширенное руководство по программированию управления памятью Исправлено обращение к объектам-зомби.обряд для разработчиков Objective-C.Придерживайтесь платформы, и у вас, несомненно, будет много возможностей отточить свою технику.

Вы также можете рассмотреть возможность использования автоматического подсчета ссылок (ARC).Это сделано для того, чтобы вам не приходилось думать об этом, и на самом деле работает чертовски хорошо.

РЕДАКТИРОВАНИЕ 2:

Только что пришло мне в голову: возможно ли, что вы использовали ARC в исходной цели, и когда вы дублировали цель, эта настройка каким-то образом отключилась?Это, безусловно, объясняет это.

...