2011-02-27 75 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的属性),则它将在主运行循环的某个点处理。

相关问题