在 MonoTouch 应用程序中使用“气泡消息”聊天时,本机堆栈跟踪崩溃

Posted

技术标签:

【中文标题】在 MonoTouch 应用程序中使用“气泡消息”聊天时,本机堆栈跟踪崩溃【英文标题】:Native stacktrace crash when using "Bubble messages" chat inside a MonoTouch app 【发布时间】:2012-06-23 22:44:53 【问题描述】:

我正在使用此处提供的示例,并在常规 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

【问题讨论】:

如果我删除了单元重用代码,错误就消失了。我总是创建单元格。但这似乎有点骇人听闻,即使性能很好并且一切正常:-) 【参考方案1】:

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

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

【讨论】:

从 Google IO 回来后,我将尝试收集一个示例项目来演示该问题并将其提交到 bugzilla 站点。

以上是关于在 MonoTouch 应用程序中使用“气泡消息”聊天时,本机堆栈跟踪崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 MonoTouch 应用程序中查看内存使用情况

Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad

如何使用 Monotouch 在 iPad 故事板应用程序中以编程方式管理视图

在 monotouch/monodroid 中使用 mocks 进行单元测试

在 MonoTouch 中使用 Redpark SDK

如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色