Приложение iphone падает без каких-либо ошибок консоли или журналов сбоев: - PullRequest
5 голосов
/ 05 декабря 2010

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

Похоже, что когда я снова запускаю тест, - (void) функция loadNextWord ниже выполняется, но ничего не происходит после этого.

Пожалуйста, помогите!

Спасибо!

Дамп из отладчика:

Моя строка 14 в основной функции - это int retVal = UIApplicationMain (argc, argv, nil, nil);

#import <UIKit/UIKit.h>

 int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

Program received signal:  “EXC_BAD_ACCESS”.
(gdb)
#0  0x025f0907 in objc_msgSend ()
#1  0x05f28da0 in ?? ()
#2  0x023cfc9d in _CFAutoreleasePoolPop ()
#3  0x0001ee67 in -[NSAutoreleasePool release] ()
#4  0x002cfe7f in _UIApplicationHandleEvent ()
#5  0x02d73822 in PurpleEventCallback ()
#6  0x02474ff4 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#7  0x023d5807 in __CFRunLoopDoSource1 ()
#8  0x023d2a93 in __CFRunLoopRun ()
#9  0x023d2350 in CFRunLoopRunSpecific ()
#10 0x023d2271 in CFRunLoopRunInMode ()
#11 0x02d7200c in GSEventRunModal ()
#12 0x02d720d1 in GSEventRun ()
#13 0x002d3af2 in UIApplicationMain ()
#14 0x00002880 in main (argc=1, argv=0xbfffef94) at /Users/vbhardwaj/Documents/ObjectiveC/FinalProject/FunWords/main.m:14

Ответы [ 2 ]

8 голосов
/ 05 декабря 2010

Глядя на трассировку стека, вы видите строку

[NSAutoreleasePool release]

Это говорит о том, что вы выпустили объект слишком много раз, например что-то вроде:

NSString *string = [NSString stringWithString:@"Hello"]; // This string is autoreleased
[string release]; // This line won't crash but is WRONG!

Приведенный выше код будетне сбой сразу, но строка будет освобождена и dealloc'd.Тем не менее, поскольку он также автоматически освобожден, пул автоматического выпуска попытается выпустить его снова в какой-то момент в будущем.Вы не знаете, когда и получите случайный сбой.

Вы, вероятно, сделали что-то подобное:)

0 голосов
/ 05 декабря 2010

Проблема связана с несколькими выпусками.

Чтобы иметь возможность правильно отлаживать свой код, даже включаемые файлы необходимы.Я вижу, что вы выпускаете wordImageView в своем коде.Ты не должен этого делать.Вам нужно воспользоваться преимуществами свойств и сделать что-то вроде

self.wordImageView = nextImageView;
[nextImageView release];

вместо

[wordImageView release]; // release the flagView's memory
wordImageView = nextImageView; // reassign flagView to the new view

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

Кстати, хотя проблема в основном цикле, ее там нет.Это только место, где очищается пул авто-выпуска, и возникает проблема.

В любом случае, возможно, посмотрите на ваш код и убедитесь, что все 'alloc' обрабатывается 'release'тот же объект внутри того же селектора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...