objective-c – 使用MFMailComposeViewController时Monotouch iO
我在Monotouch iOS 6中使用MFMailComposeViewController时出现了一个奇怪的错误,但它在iOS 5.1中运行良好:
*** Assertion failure in NSDictionary *_UIRecordArgumentOfInvocationAtIndex(NSInvocation *,NSUInteger,BOOL)(),/SourceCache/UIKit/UIKit-2372/UIAppearance.m:1118 这是代码: MFMailComposeViewController _mail; public void SendFeedbackMail (string email_subject,string email_message_body,string[] email_recipients) { if (MFMailComposeViewController.CanSendMail) { _mail = new MFMailComposeViewController (); _mail.SetSubject (email_subject); _mail.SetToRecipients (email_recipients); _mail.SetMessageBody (email_message_body + "n",false); _mail.Finished += HandleMailFinished; root_controller.PresentViewController(_mail,true,null); } else { //handle not being able to send mail UIAlertView alert = new UIAlertView ("Mail Alert","Error: Check your eMail configuration",null,"OK",null); alert.Show (); } } 模拟器上的本机堆栈跟踪: Native stacktrace: 0 MyAppProject 0x0007ba5c mono_handle_native_sigsegv + 284 1 MyAppProject 0x00004a62 mono_sigsegv_signal_handler + 178 2 libsystem_c.dylib 0x93ad486b _sigtramp + 43 3 ??? 0xffffffff 0x0 + 4294967295 4 MyAppProject 0x0014e8be mono_runtime_invoke + 126 5 MyAppProject 0x001ec80f monotouch_exception_handler + 63 6 CoreFoundation 0x020e0318 __handleUncaughtException + 728 7 libobjc.A.dylib 0x0228d0b9 _ZL15_objc_terminatev + 86 8 libstdc++.6.dylib 0x0289e652 _ZSt9terminatev + 21 9 libobjc.A.dylib 0x0228d039 _destroyAltHandlerList + 0 10 libdispatch.dylib 0x0299d027 _dispatch_client_callout + 33 11 libdispatch.dylib 0x0298cd5f _dispatch_barrier_sync_f_invoke + 58 12 libdispatch.dylib 0x0298caa3 dispatch_barrier_sync_f + 108 13 libdispatch.dylib 0x0298ce5e dispatch_sync + 45 14 UIKit 0x00f7ffad __76-[_UIRemoteViewControllerConnectionRequest _connectToViewControllerOperator]_block_invoke_0 + 105 15 UIKit 0x00f8be46 __block_global_0 + 54 16 libdispatch.dylib 0x0299d014 _dispatch_client_callout + 14 17 libdispatch.dylib 0x0298f09f dispatch_once_f + 57 18 libdispatch.dylib 0x0298f061 dispatch_once + 31 19 UIKit 0x00f8be0a __73-[_UIViewServiceSessionEndpoint connectToDeputyOfType:connectionHandler:]_block_invoke_0 + 105 20 UIKit 0x00f8c002 __73-[_UIViewServiceSessionEndpoint connectToDeputyOfType:connectionHandler:]_block_invoke_040 + 25 21 UIKit 0x00fe94e9 __block_global_0 + 32 22 libdispatch.dylib 0x0298b53f _dispatch_call_block_and_release + 15 23 libdispatch.dylib 0x0299d014 _dispatch_client_callout + 14 24 libdispatch.dylib 0x0298d418 _dispatch_queue_drain + 239 25 libdispatch.dylib 0x0298d2a6 _dispatch_queue_invoke + 59 26 libdispatch.dylib 0x0298e280 _dispatch_root_queue_drain + 231 27 libdispatch.dylib 0x0298e450 _dispatch_worker_thread2 + 39 28 libsystem_c.dylib 0x93aeae12 _pthread_wqthread + 441 29 libsystem_c.dylib 0x93ad2cca start_wqthread + 30 同样在模拟器上,应用程序会挂起一段时间,然后在调试器上抛出异常并崩溃: Mono.Debugger.Soft.VMDisconnectedException: Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown. at Mono.Debugger.Soft.Connection.SendReceive (CommandSet command_set,Int32 command,Mono.Debugger.Soft.PacketWriter packet) [0x00117] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:1420 at Mono.Debugger.Soft.Connection.Type_GetCustomAttributes (Int64 id,Int64 attr_type_id,Boolean inherit) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:1986 at Mono.Debugger.Soft.TypeMirror.GetCAttrs (Mono.Debugger.Soft.TypeMirror type,Boolean inherit) [0x0003d] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/TypeMirror.cs:679 at Mono.Debugger.Soft.TypeMirror.GetCustomAttributes (Boolean inherit) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/TypeMirror.cs:664 at Mono.Debugging.Soft.SoftDebuggerAdaptor.OnGetTypeDisplayData (Mono.Debugging.Evaluation.EvaluationContext gctx,System.Object type) [0x0001e] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:1066 Application Terminated Mono.Debugger.Soft.VMDisconnectedException: Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown. at Mono.Debugger.Soft.Connection.SendReceive (CommandSet command_set,Mono.Debugger.Soft.PacketWriter packet) [0x0013f] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:1425 at Mono.Debugger.Soft.Connection.Type_GetMethodsByNameFlags (Int64 id,System.String name,Int32 flags,Boolean ignoreCase) [0x00016] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/Connection.cs:2002 at Mono.Debugger.Soft.TypeMirror.GetMethodsByNameFlags (System.String name,BindingFlags flags,Boolean ignoreCase) [0x0001c] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft/TypeMirror.cs:691 at Mono.Debugging.Soft.SoftDebuggerAdaptor.OverloadResolve (Mono.Debugging.Soft.SoftEvaluationContext ctx,System.String methodName,Mono.Debugger.Soft.TypeMirror type,Mono.Debugger.Soft.TypeMirror[] argtypes,Boolean allowInstance,Boolean allowStatic,Boolean throwIfNotFound) [0x00073] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:1231 at Mono.Debugging.Soft.SoftDebuggerAdaptor.CallToString (Mono.Debugging.Evaluation.EvaluationContext ctx,System.Object obj) [0x00107] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:91 at Mono.Debugging.Evaluation.ObjectValueAdaptor.TargetObjectToObject (Mono.Debugging.Evaluation.EvaluationContext ctx,System.Object obj) [0x00349] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ObjectValueAdaptor.cs:980 at Mono.Debugging.Soft.SoftDebuggerAdaptor.TargetObjectToObject (Mono.Debugging.Evaluation.EvaluationContext gctx,System.Object obj) [0x001a5] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/addins/MonoDevelop.Debugger.Soft/Mono.Debugging.Soft/SoftDebuggerAdaptor.cs:1400 at Mono.Debugging.Evaluation.ExpressionEvaluator.TargetObjectToExpression (Mono.Debugging.Evaluation.EvaluationContext ctx,System.Object obj) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ExpressionEvaluator.cs:83 at Mono.Debugging.Evaluation.ObjectValueAdaptor.CreateObjectValueImpl (Mono.Debugging.Evaluation.EvaluationContext ctx,IObjectValueSource source,ObjectPath path,System.Object obj,ObjectValueFlags flags) [0x000f5] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ObjectValueAdaptor.cs:385 at Mono.Debugging.Evaluation.ObjectValueAdaptor.CreateObjectValue (Mono.Debugging.Evaluation.EvaluationContext ctx,ObjectValueFlags flags) [0x00000] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-3.0.4-branch/ea010826/source/monodevelop/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ObjectValueAdaptor.cs:93 设备上的本机堆栈跟踪: 0 MyAppProject 0x01b39e85 mono_handle_native_sigsegv + 244 1 MyAppProject 0x01afe3cf mono_sigsegv_signal_handler + 130 2 libsystem_c.dylib 0x3aaa8e93 _sigtramp + 42 3 MyAppProject 0x01b92a9d mono_domain_get + 20 4 MyAppProject 0x01b5d53b mono_runtime_invoke + 90 5 MyAppProject 0x01bbd8c0 monotouch_exception_handler + 72 6 CoreFoundation 0x36cee57f <redacted> + 614 7 libobjc.A.dylib 0x34ffea65 <redacted> + 128 8 libc++abi.dylib 0x33e4807b <redacted> + 78 9 libc++abi.dylib 0x33e48114 <redacted> + 19 10 libc++abi.dylib 0x33e49513 __cxa_throw + 122 11 libobjc.A.dylib 0x34ffe9bf objc_exception_throw + 94 12 CoreFoundation 0x36cee15d <redacted> + 0 13 Foundation 0x3477030b <redacted> + 86 14 UIKit 0x3834a925 <redacted> + 1844 15 UIKit 0x38349a7b <redacted> + 634 16 CoreFoundation 0x36ceb62f <redacted> + 714 17 UIKit 0x383497f5 <redacted> + 136 18 UIKit 0x384275e5 <redacted> + 60 19 UIKit 0x383b5cd7 <redacted> + 206 20 UIKit 0x383b5b6d <redacted> + 264 21 libdispatch.dylib 0x359e29f7 <redacted> + 30 22 UIKit 0x383b5a61 <redacted> + 92 23 UIKit 0x383bf0d5 <redacted> + 32 24 libdispatch.dylib 0x359e43f7 <redacted> + 42 25 UIKit 0x383bf0b1 <redacted> + 88 26 libdispatch.dylib 0x359df11f <redacted> + 10 27 libdispatch.dylib 0x359e2ecf <redacted> + 142 28 libdispatch.dylib 0x359e2dc1 <redacted> + 40 29 libdispatch.dylib 0x359e391d <redacted> + 184 30 libdispatch.dylib 0x359e3ac1 <redacted> + 84 31 libsystem_c.dylib 0x3aa76a11 <redacted> + 360 32 libsystem_c.dylib 0x3aa768a4 start_wqthread + 8 任何帮助表示赞赏. 更新: 不幸的是,这里似乎有多个错误. 在我的情况下,邮件编辑器的崩溃不是由外观或 所以我开始逐行评论我的所有代码,然后我把它钉了下来: 这是In App Purchase代码. 我正在使用xamarin网站上的In App Purchase示例中的代码. 如果我使用SKProductRequest类只注释这一行: productsRequest.Start(); MFMailComposer打开并完美运行! 所以我在最初的Xamarin示例项目中测试了MFMailComposer: http://docs.xamarin.com/ios/tutorials/In-App_Purchasing 我刚刚将此代码添加到NonConsumableViewController类: /// <summary> /// TEST MAIL COMPOSER BUG - START /// </summary> MFMailComposeViewController _mail; void HandleFinished (object sender,MFComposeResultEventArgs e) { } public void TestMailComposer () { var button = UIButton.FromType(UIButtonType.RoundedRect); button.Frame = new RectangleF(20f,0f,280f,40f); button.TouchUpInside += (object sender,EventArgs e) => { if (MFMailComposeViewController.CanSendMail) { _mail = new MFMailComposeViewController (); _mail.SetSubject ("The Subject"); _mail.SetToRecipients (new [] {"the@recipient.com"}); _mail.SetMessageBody ("Some text to e-mail stuff too" + "n",false); _mail.Finished += HandleFinished; this.PresentViewController(_mail,null); } else { //handle not being able to send mail UIAlertView alert = new UIAlertView ("Mail Alert","Error: Check your eMail configuration",null); alert.Show (); } }; button.SetTitle("Button",UIControlState.Normal); View.AddSubview(button); } /// /// TEST MAIL COMPOSER BUG - END /// 当我按下按钮时,它会挂起. 更新: 我尝试了6.0.2修补程序(抱歉等待,但我不得不将我的代码恢复到原始状态).外观错误现在消失了. SKProductRequest类的问题似乎不同而且不太紧急.它没有挂起,只是推迟了MF Mail作曲家的开放一段时间.但这似乎是一个无关的错误. 这是bug参考: 解决方法
这可能有所帮助(来自Xamarin bug)
cancelAttributes = new UITextAttributes(); //cancelAttributes.TextShadowOffset = new UIOffset(0,-1); cancelAttributes.TextShadowColor = UIColor.White.ColorWithAlpha(0.5f); cancelAttributes.TextColor = Resources.CancelButtonDisabled; UIBarButtonItem.AppearanceWhenContainedIn(typeof(UISearchBar)).SetTitleTextAttributes(cancelAttributes,UIControlState.Disabled); 如果我的代码中有注释位,我会遇到问题,但如果注释掉则不会.你在使用UIAppearance吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |