Метод UITableViewDelegate dealloc, вызываемый во время работы приложения - PullRequest
1 голос
/ 27 февраля 2011

У меня есть класс, который обрабатывает методы делегата для таблицы.Я использовал IB и перетащил в NIB UITableViewDelegate, который я изменил в своем классе.Я также включил объект UITableView в NIB, где я подключаю делегат и источник данных к моему классу TableViewDelegate.

Мой класс получает данные своей таблицы из Интернета, поэтому я вызываю делегированные методы один раз при проектировании представления и возвращаю счетчик 0, потому что мои данные еще не поступили.Когда я заканчиваю получать все данные, я делаю [myTable reloadData] и мои методы делегата снова получают вызов.Проблема в том, что я вызываю numberOfRowsInSection, где я теперь возвращаю количество строк, но никогда не вызываю cellForRowAtIndexPath и вместо этого получаю EXC_BAD_ACCESS.После включения истории стека и зомби я обнаружил, что вызывается dealloc для класса.

dealloc restTable Class - создается с помощью NSLOG внутри метода dealloc.

2011-02-27 00: 33: 59.979 PesquisaMapa [3526: 207] * - [restTable tableView: cellForRowAtIndexPath:]: сообщение отправлено в освобожденный экземпляр 0x5624190 Поскольку мой объект изначально был создан в IB, а мой IBOutlet объявлен в главномфайл заголовка класса и освобождается только когда приложение заканчивается, я действительно не понимаю, почему этот экземпляр класса освобождается.Мой стек выглядит следующим образом:

(gdb) info malloc-history 0x5624190 Alloc: адрес блока: 0x05624190 длина: 160 Stack - pthread: 0xa0a5f540 количество кадров: 34 0: 0x9876f103 в malloc_zone_calloc 1: 0x9876f05a в calloc: 0x110ad0f в _internal_class_createInstanceFromZone 3: 0x110d87d в class_createInstance 4: 0xedaff8 в + [NSObject (NSObject) allocWithZone:] 5: 0xedadfa в + [NSObject (NSObject) Alloc] 6: 0x4c1205 в - [UIClassSwapper initWithCoder:] 7: 0x5a79e4 в UINibDecoderDecodeObjectForValue 8: 0x5a8693 в - [UINibDecoder decodeObjectForKey:] 9: 0x4c0f43 в - [UIRuntimeConnection initWithCoder:] 10: 0x5a79e4 в UINibDecoderDecodeObjectForValue 11: 0x5a72dc в UINibDecoderDecodeObjectForValue 12: 0x5a8693 в - [UINibDecoder decodeObjectForKey:] 13: 0x4c0200 в - [UINib instantiateWithOwner: варианты:] 14: 0x4c2081 in - [NSBundle (UINSBundleAdditions) loadNibNamed: владелец: параметры:] 15: 0x37aa94 in - [UIViewController _loadViewFromNibNamed: bundle:] 16: 0x378709 in - [UIViewController loadПредставление] 17: 0x3785e3 in - [представление UIViewController] 18: 0x22fe in - [PesquisaMapaAppDelegate application: didFinishLaunchingWithOptions:] в /Users/pcasqueiro/Documents/PesquisaMapa/Classes/PesquisaMapa2_DateBate_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exchange_Exject_Exchange_Exchange_Exchange_Exchange_Exла_Exchange_P бирж.: приостановлено:] 20: 0x2cd55e во -: 0x18eca36 в PurpleEventCallback 25: 0xf98064 в CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION 26: 0xef86f7 в __CFRunLoopDoSource1 27: 0xef5983 в __CFRunLoopRun 28: 0xef5240 в CFRunLoopRunSpecific 29: 0xef5161 в CFRunLoopRunInMode 30: 0x2ccfa8 в - [UIApplication _run] 31: 0x2d942e в UIApplicationMain 32: 0x228c в основном в /Users/pcasqueiro/Documents/PesquisaMapa/main.m:14 33: 0x221d в начале

Это выглядит такмоя очистка происходит в didFinishLaunchingWithOptions моего основного класса.

Любые идеи о том, что я делаю неправильно?

спасибо, ПК

1 Ответ

0 голосов
/ 27 февраля 2011

UITableView (и большинство других классов) не сохраняют своих делегатов. Это означает, что если вы не сохраните делегат каким-либо образом (например, присвоив его свойству, объявленному как retain), то в какой-то момент он будет удален основным циклом выполнения.

...