0

我正在使用此处提供的示例,并在常规 UITableView 中使用了代码:http: //tirania.org/monomac//archive/2012/Jan.html

我认为一切都很好,直到我添加了很多消息。然后,当屏幕上的消息太多时,我看到它崩溃(似乎是单元重用问题)。

我的主要问题是堆栈跟踪几乎什么也没说,所以有人在常规 UITableView 中使用此代码并想分享一些代码吗?

下面是我的 GetCell 方法和堆栈跟踪:

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
    {
        ChatMessage 消息 = _items[indexPath.Row];
        bool isLeft = msg.User.UserId != _controller._gamebackend.GetLocalUser().UserId;
        var cell = tableView.DequeueReusableCell (isLeft ? BubbleCell.KeyLeft : BubbleCell.KeyRight) as BubbleCell;
        如果(单元格 == 空)
            单元格 = 新的 BubbleCell (isLeft);

        cell.Update (GetBubbleText(msg));
        cell.SelectionStyle = UITableViewCellSelectionStyle.None;   
        返回单元格;
    }

2 libsystem_c.dylib 0x31f247ed _sigtramp + 48
6 月 24 日 00:27:53 未知 3 基金会 0x3716a137 probeGC + 62
6 月 24 日 00:27:53 未知 4 基础 0x3718983b -[NSConcreteMapTable removeObjectForKey:] + 34
6 月 24 日 00:27:53 未知 5 UIKit 0x353e13a1 -[_UIImageViewPretiledImageWrapper dealloc] + 80
6 月 24 日 00:27:53 未知 6 libobjc.A.dylib 0x34abe175 _objc_rootRelease + 36
6 月 24 日 00:27:53 未知 7 libobjc.A.dylib 0x34abfe57 objc_release + 38
6 月 24 日 00:27:53 未知 8 libobjc.A.dylib 0x34abeead _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 224
6 月 24 日 00:27:53 未知 9 libobjc.A.dylib 0x34abedc9 _objc_autoreleasePoolPop + 12
6 月 24 日 00:27:53 未知 10 CoreFoundation 0x32a6dcff _CFAutoreleasePoolPop + 18
6 月 24 日 00:27:53 未知 11 QuartzCore 0x31fba91d _ZN2CA7Display11DisplayLink8dispatchEyy + 340
6 月 24 日 00:27:53 未知 12 QuartzCore 0x31fba7c5 _ZN2CA7Display16IOMFBDisplayLink8callbackEP21__IOMobileFramebufferyyyPv + 60
6 月 24 日 00:27:53 未知 13 IOMobileFramebuffer 0x32ba8001 IOMobileFramebufferVsyncNotifyFunc + 156
6 月 24 日 00:27:53 未知 14 IOKit 0x34e3d60d IODispatchCalloutFromCFMessage + 188
6 月 24 日 00:27:53 未知 15 CoreFoundation 0x32ae6f13 __CFMachPortPerform + 362
6 月 24 日 00:27:53 未知 16 CoreFoundation 0x32af1523 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 38
6 月 24 日 00:27:53 未知 17 CoreFoundation 0x32af14c5 __CFRunLoopDoSource1 + 140
6 月 24 日 00:27:53 未知 18 CoreFoundation 0x32af0313 __CFRunLoopRun + 1370
6 月 24 日 00:27:53 未知 19 CoreFoundation 0x32a734a5 CFRunLoopRunSpecific + 300
6 月 24 日 00:27:53 未知 20 CoreFoundation 0x32a7336d CFRunLoopRunInMode + 104
6 月 24 日 00:27:53 未知 21 GraphicsServices 0x32bc0439 GSEventRunModal + 136
6 月 24 日 00:27:53 未知 22 UIKit 0x35052cd5 UIApplicationMain + 1080
4

1 回答 1

1

还有另一种解决方法:将您创建的所有单元格存储在类级列表中。

然而,这不应该发生在从 UITableViewCells 派生的类型上,所以您也可以在http://bugzilla.xamarin.com上提交一个错误,以便将来可以防止这种情况发生吗?

于 2012-06-25T08:53:07.863 回答