Сбой iOS TableView не знаю как. Вот приложение - PullRequest
2 голосов
/ 07 января 2011

В моем приложении, которое вы можете скачать здесь: http://ge.tt/2DDqfJa

Я начал обсуждение, но уже умер Сбой iOS TableView при загрузке различных данных

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

И когда я выбираю категорию во второй раз, где приходится загружать таблицу с другим источником данных, онаcrash.

Это журнал аварий

Программа получила сигнал: «EXC_BAD_ACCESS».

(gdb) bt
#0  0x00f0da63 in objc_msgSend ()
#1  0x04b27ca0 in ?? ()
#2  0x00002665 in -[RecipesListController viewWillAppear:] (self=0x4b38a00, _cmd=0x6d81a2, animated=1 '\001') at /Users/claudiocanino/Documents/iOS/CottoMangiato/Classes/RecipesListController.m:67
#3  0x00370c9a in -[UINavigationController _startTransition:fromViewController:toViewController:] ()
#4  0x0036b606 in -[UINavigationController _startDeferredTransitionIfNeeded] ()
#5  0x0037283e in -[UINavigationController pushViewController:transition:forceImmediate:] ()
#6  0x04f49549 in -[UINavigationControllerAccessibility(SafeCategory) pushViewController:transition:forceImmediate:] ()
#7  0x0036b4a0 in -[UINavigationController pushViewController:animated:] ()
#8  0x00003919 in -[CategoryViewController tableView:didSelectRowAtIndexPath:] (self=0x4b27ca0, _cmd=0x6d19e3, tableView=0x500c200, indexPath=0x4b2d650) at /Users/claudiocanino/Documents/iOS/CottoMangiato/Classes/CategoryViewCotroller.m:104
#9  0x0032a794 in -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] ()
#10 0x00320d50 in -[UITableView _userSelectRowAtPendingSelectionIndexPath:] ()
#11 0x000337f6 in __NSFireDelayedPerform ()
#12 0x00d8cfe3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#13 0x00d8e594 in __CFRunLoopDoTimer ()
#14 0x00ceacc9 in __CFRunLoopRun ()
#15 0x00cea240 in CFRunLoopRunSpecific ()
#16 0x00cea161 in CFRunLoopRunInMode ()
#17 0x016e0268 in GSEventRunModal ()
#18 0x016e032d in GSEventRun ()
#19 0x002c342e in UIApplicationMain ()
#20 0x00001c08 in main (argc=1, argv=0xbfffef58) at /Users/claudiocanino/Documents/iOS/CottoMangiato/main.m:15

Другой журнал bt:

(gdb) bt
#0  0x00cd76a1 in __CFBasicHashDeallocate ()
#1  0x00cc2bcb in _CFRelease ()
#2  0x00002dd6 in -[RecipesListController setRecipesArray:] (self=0x6834d50, _cmd=0x4293, _value=0x4e3bc70) at /Users/claudiocanino/Documents/iOS/CottoMangiato/Classes/RecipesListController.m:16
#3  0x00002665 in -[RecipesListController viewWillAppear:] (self=0x6834d50, _cmd=0x6d81a2, animated=1 '\001') at /Users/claudiocanino/Documents/iOS/CottoMangiato/Classes/RecipesListController.m:67
#4  0x00370c9a in -[UINavigationController _startTransition:fromViewController:toViewController:] ()
#5  0x0036b606 in -[UINavigationController _startDeferredTransitionIfNeeded] ()
#6  0x0037283e in -[UINavigationController pushViewController:transition:forceImmediate:] ()
#7  0x091ac549 in -[UINavigationControllerAccessibility(SafeCategory) pushViewController:transition:forceImmediate:] ()
#8  0x0036b4a0 in -[UINavigationController pushViewController:animated:] ()
#9  0x00003919 in -[CategoryViewController tableView:didSelectRowAtIndexPath:] (self=0x4b12970, _cmd=0x6d19e3, tableView=0x5014400, indexPath=0x4b2bd00) at /Users/claudiocanino/Documents/iOS/CottoMangiato/Classes/CategoryViewCotroller.m:104
#10 0x0032a794 in -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] ()
#11 0x00320d50 in -[UITableView _userSelectRowAtPendingSelectionIndexPath:] ()
#12 0x000337f6 in __NSFireDelayedPerform ()
#13 0x00d8cfe3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#14 0x00d8e594 in __CFRunLoopDoTimer ()
#15 0x00ceacc9 in __CFRunLoopRun ()
#16 0x00cea240 in CFRunLoopRunSpecific ()
#17 0x00cea161 in CFRunLoopRunInMode ()
#18 0x016e0268 in GSEventRunModal ()
#19 0x016e032d in GSEventRun ()
#20 0x002c342e in UIApplicationMain ()
#21 0x00001c08 in main (argc=1, argv=0xbfffef58) at /Users/claudiocanino/Documents/iOS/CottoMangiato/main.m:15

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 января 2011

Вы, вероятно, пытались получить доступ к объекту, который был освобожден. Ищите «NSZombieEnabled» и читайте о том, как отладить проблемы избыточного выпуска.

0 голосов
/ 07 января 2011

Проблема в том, что вы чрезмерно выпускаете объекты.Поскольку вы используете retain-properties, вам не нужно освобождать объект при назначении нового объекта свойству.Старый объект будет выпущен автоматически.Поэтому эти строки не имеют смысла, удалите их:

if (self.recipesArray != nil) {

    // Release the arrays
    [self.recipesArray release];
    [self.recipesNames release];
}

В cellForRowAtIndexPath (RecipesListController) вы освобождаете rowString.Там нет необходимости делать это здесь.Удалите эту строку, и все должно работать правильно.

0 голосов
/ 07 января 2011
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];

self.recipesArray = dict;

[dict release];

в вашем файле RecipesListController.m отметьте 55 строк в представлении, и вы увидите, что вы освобождаете объект, который никогда не отдает памяти

, когда я комментирую // ////[self.recipesNames release];затем происходит сбой в строке таблицы, проверьте его

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