【发布时间】:2013-04-10 13:19:14
【问题描述】:
在论坛上几个小时后,我仍然无法弄清楚。
场景: 我有一个带有可扩展列表的表格视图。当用户想要展开列表时,单击标题,表格会刷新新的计数值。 表头视图为:
[MonoTouch.Foundation.Export("tableView:viewForHeaderInSection:")]
public override UIView GetViewForHeader (UITableView tableView, int section)
{
float headerHeight= ...;
UIView headerView = new UIView (new RectangleF ...);
UIButton button1=new UIButton(new RectangleF (...));
//set label for button
UILabel labelTextButton = new UILabel(new RectangleF ...);
labelTextButton.Text=...;
labelTextButton.Lines=2;
button1.AddSubview(labelTextButton);
button1.TouchUpInside+= (sender, e) =>{
...
tableView.ReloadData();
};
headerView.AddSubview (button1);
return headerView;
}
- 在模拟器上运行时,第一次运行时总是给我这样的错误:
应用程序退出模拟器主页。如果我从模拟器界面(而不是 MonoTouch)再次启动应用程序,它每次都能完美运行。
- 将应用程序加载到设备时:
它在第一次运行时运行良好,但有时(每天 3 次)应用程序会以与模拟器相同的方式挂起,但出现不同的错误。
2013-04-10 16:03:16.838 XXXXXXXXX[2480:907]-[CALayer BridgeSelector]:无法识别的选择器发送到实例 0x2101da0 2013-04-10 16:03:24.294 XXXXXXXXX[2480:907] 未处理的托管异常:引发了 Objective-C 异常。名称:NSInvalidArgumentException 原因:-[CALayer BridgeSelector]:无法识别的选择器发送到实例 0x2101da0 (MonoTouch.Foundation.MonoTouchException) 在 MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] 在 /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 在 XXX.Mobile.IOS.Application.Main (System.String[] args) [0x00000] 在 ...../Main.cs:17 堆栈跟踪: 本机堆栈跟踪: 0 XXXXXXXXX 0x007ff711 mono_handle_native_sigsegv + 244 1 XXXXXXXXX 0x0083b8cd sigabrt_signal_handler + 112 2 libsystem_c.dylib 0x3a847e93 _sigtramp + 42 3 libsystem_c.dylib 0x3a83e123 pthread_kill + 58 4 libsystem_c.dylib 0x3a87a973 中止 + 94 5 XXXXXXXXX 0x0089a230 monotouch_throw_monotouch_exception + 0 6 XXXXXXXXX 0x007fd0e9 mono_invoke_unhandled_exception_hook + 92 7 XXXXXXXXX 0x007b55e3 mono_thread_abort + 46 8 XXXXXXXXX 0x007ff3e7 mono_handle_exception_internal + 2138 9 XXXXXXXXX 0x007ff4b5 mono_handle_exception + 12 10 XXXXXXXXX 0x0083ab31 mono_arm_throw_exception + 132 11 XXXXXXXXX 0x003ba468 throw_exception + 68 12 XXXXXXXXX 0x0089a27c monotouch_exception_handler + 0 13 XXXXXXXXX 0x0089a32c objc_skip_type + 0 14 核心基础 0x3252557f + 614 15 libobjc.A.dylib 0x3a3c9a65 + 128 16 libc++abi.dylib 0x39e1607b + 78 17 libc++abi.dylib 0x39e16114 + 19 18 libc++abi.dylib 0x39e17599 cxa_current_exception_type + 0 19 libobjc.A.dylib 0x3a3c99d1 objc_exception_rethrow + 12 20 核心基础 0x3246bf21 CFRunLoopRunSpecific + 456 21 核心基础 0x3246bd49 CFRunLoopRunInMode + 104 22 图形服务 0x360202eb GSEventRunModal + 74 23 UIKit 0x34381301 UIApplicationMain + 1120 24 XXXXXXXXX 0x0013950c wrapper_managed_to_native_MonoTouch_UIKit_UIApplication_UIApplicationMain_int_string_intptr_intptr + 240 25 XXXXXXXXX 0x00674f70 XXX_Mobile_IOS_Application_Main_string__ + 152 26 XXXXXXXXX 0x00384db0 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 200 27 XXXXXXXXX 0x007b7b7f mono_jit_runtime_invoke + 1054 28 XXXXXXXXX 0x008315ab mono_runtime_invoke + 90 29 XXXXXXXXX 0x00834457 mono_runtime_exec_main + 306 30 XXXXXXXXX 0x008346ab mono_runtime_run_main + 482 31 XXXXXXXXX 0x007d35db mono_jit_exec + 94 32 XXXXXXXXX 0x00888584 主 + 2220 33 XXXXXXXXX 0x000143e4 开始 + 40 ==================================================== ================ 执行本机代码时收到 SIGABRT。这通常表明 单声道运行时或本机库之一中的致命错误 由您的应用程序使用。 ==================================================== ================我不知道这是否是 Monotouch 上 GC 的错误,或者我做错了什么。我在某处读到发送到实例的无效选择器已解决。 我试图在按钮事件处理程序中放置断点,但它从未到达那个点。
论坛的其他帖子建议将变量设置为全局变量(这不是一个好的编程习惯),但这也不起作用。
我的配置:
Xamarin 工作室 版本 4.0.3(构建 13) 运行: 单声道 2.10.12 (mono-2-10/c9b270d) GTK 2.24.16 GTK# (2.12.0.0) 包版本:210120000 苹果开发者工具 Xcode 4.6.1 (2067) 构建 4H512 Xamarin.Mac Xamarin.Mac:未安装 Xamarin.iOS 版本:6.2.2.8(商业版) 构建日期:2013-02-04 17:10:37-0400 构建信息 发行编号:400030013 Git 修订:fae7c2bde0e8d51943fbd6afa22d7d2bb7a1192f 构建日期:2013-03-21 19:16:39+0000 Xamarin 插件:906a1edff23bcfd0ab7518463620a8ee506eaea2 操作系统 Mac OS X 10.8.3 感谢您的时间奥维迪乌
【问题讨论】:
-
更新:我看到模拟器只有在调试模式下才会发生这种情况。在发布模式下,模拟器每次都能正常工作。我认为这是 Monotouch 的问题。对于设备,问题仍然存在。
标签: ios mono xamarin.ios