2011-02-27 59 views
1

我有一個處理表的委託方法的類。我已經使用了IB並將其拖入NIB中,並將其更改爲我的課程UITableViewDelegate。我還在NIB中包含了一個UITableView對象,我將委託和數據源連接到TableViewDelegate類。正在調用應用程序仍在運行時調用UITableViewDelegate dealloc方法

我的課程從互聯網上獲取表格數據,所以我在視圖設計中調用了一次委託方法,並返回0,因爲我的數據尚未到達。當我完成獲取所有數據時,我會執行[myTable reloadData],然後我的委託方法再次獲得調用。 問題是我得到了numberOfRowsInSection調用,在那裏我現在返回的行數,但從來沒有得到cellForRowAtIndexPath調用,而是得到一個EXC_BAD_ACCESS。 啓用堆棧歷史和殭屍後,我發現該類的dealloc被調用。

dealloc restTable類 - 在dealloc方法內部用NSLOG生成。

2011-02-27 00:33:59.979 PesquisaMapa [3526:207] * - [restTable的tableView:的cellForRowAtIndexPath:]:由於我的對象是在IB和我的IBOutlet中最初創建的消息發送到釋放的實例0x5624190 它是在主類頭文件中聲明的,並且只在應用程序結束時才釋放,我真的不明白爲什麼這個類的實例將被釋放。 我的堆如下:

(GDB)信息的malloc履歷0x5624190 的Alloc:塊地址:0x05624190長度:160 堆棧 - 並行線程:在malloc_zone_calloc 1 0x9876f103:0xa0a5f540幀數:34 0 0x9876f05a在釋放calloc 2:0x110ad0f在_internal_class_createInstanceFromZone 3:0x110d87d在class_createInstance 4:0xedaff8在+ [NSObject的(NSObject的)allocWithZone:] 5:0xedadfa在+ [NSObject的(NSObject的)的alloc] 6:0x4c1205在 - [UIClassSwapper的initWithCoder :] 7:0x5a79e4 in 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在 - [一個NSBundle(UINSBundleAdditions)loadNibNamed:所有者:選擇:] 15:0x37aa94在 - [UIViewController中_loadViewFromNibNamed:束:] 16:0x378709在 - [UIViewController中的loadView] 17:0x3785e3在 - [UIViewController視圖] 18:0x22fe在 - [PesquisaMapaAppDelegate application:didFinishLaunchingWithOptions:] at/Users/pcasqueiro/Documents/PesquisaMapa/C lasses/PesquisaMapaAppDelegate。米:24 19:0x2cb1fa在 -​​ [UIApplication的_callInitializationDelegatesForURL:有效載荷:懸浮:] 20:0x2cd55e在 - [UIApplication的_runWithURL:有效載荷:launchOrientation:statusBarStyle:statusBarHidden:] 21:0x2d7db2在 - [UIApplication的的handleEvent:withNewEvent:] 22:0x2d0202在 - [UIApplication的的SendEvent:] 23:0x2d5732在_UIApplicationHandleEvent 24:0x18eca36在PurpleEventCallback 25:0xf98064在CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION 26:0xef86f7在__CFRunLoopDoSource1 27:在__CFRunLoopRun 28 0xef5983:0xef5240在CFRunLoopRunSpecific 29:0xef5161在CFRunLoopRunInMode中 30:0x2ccfa8在 - [UIApplication的_run] 31:0x2d942e在UIApplicationMain 32:0x228c在主在/Users/pcasqueiro/Documents/PesquisaMapa/main.m:14 33:0x221d在開始

它看起來像我的主類的didFinishLaunchingWithOptions正在進行一些清理。

任何意識到我做錯了什麼?

感謝, PC

回答

0

的UITableView(和大多數其他類)不保留其代表。這意味着,如果您不以某種方式保留委託(例如,通過將其分配給聲明爲retain的屬性),則它將在主運行循環的某個點處理。

相關問題