2012-01-15 3 views
0

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

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 

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

+0

Xcode может помочь вам найти Зомби. http://stackoverflow.com/questions/2190227/how-do-i-setup-nszombieenabled-in-xcode-4/8863063#8863063 это покажет вам, когда счетчик удержания данного объекта изменился – Besi

ответ

1

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

EDIT:

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

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

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

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

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

EDIT 2:

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

+0

сделано! Я получаю эту ошибку: сообщение Objective-C было отправлено на освобожденный объект (зомби) по адресу: 0x7848500. – JackTurky

+0

В чем проблема? – JackTurky