4

当我得到一个奇怪的错误,当我在MonoTouch的iOS 6中使用MFMailComposeViewController,但它的iOS 5.1的罚款:的MonoTouch iOS 6的崩溃使用MFMailComposeViewController

*** 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, Int32 command, 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, IObjectValueSource source, ObjectPath path, System.Object obj, 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打开并工作得很好!

所以我测试的MFMailComposer原始Xamarin样本项目:

http://docs.xamarin.com/ios/tutorials/In-App_Purchasing http://docs.xamarin.com/@api/deki/files/3300/=InAppPurchaseSample.zip

我刚刚添加此代码到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 [] {"[email protected]"}); 
        _mail.SetMessageBody ("Some text to e-mail stuff too" + 
"\n", false); 
        _mail.Finished += HandleFinished; 

        this.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(); 
       } 
      }; 
      button.SetTitle("Button", UIControlState.Normal); 
      View.AddSubview(button); 
     } 

     /// 
     /// TEST MAIL COMPOSER BUG - END 
     /// 

当我按下按钮它挂起。

UPDATE:

我试过6.0.2修补程序(对不起,等待,但我不得不恢复我的代码到原来的状态)。外观缺陷现在消失了。

SKProductRequest类的问题看起来不同而且不太紧急。它没有挂起,它只是推迟了一段时间MF Mail作曲家的开放。但这似乎是一个无关的错误。

这是错误的参考: https://bugzilla.xamarin.com/show_bug.cgi?id=7443

+0

你可以显示完整的堆栈跟踪吗? –

+0

我想这可能与'null'回调传递给'PresentViewController'有关。你可以把'委托{}(基本上是一个空函数)放在那里,而不是看它是否修复它? – jonathanpeppers

+0

尝试了使用空委托的建议,但没有帮助。 –

回答

2

这可能有助于(从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的东西吗?

+0

这是固定的,将成为MonoTouch 6.0.2的一部分。对于使用6.0.1的人员,Bug报告提供了一个热修复程序。 – poupou

+0

不幸的是,这并没有解决我的问题。我不使用任何外观或文本属性。还有另一个bug使我的MFComposer崩溃,并且我隔离了代码行,如果注释掉了它。如果我使用SKProductRequest类注释此行:productsRequest.Start(); MFComposer工作并不会崩溃。 –

+0

我试过修补程序(抱歉等待,但我不得不将我的代码恢复到原始状态)。外观错误消失了,谢谢。 SKProductRequest类的问题看起来不同而且不太紧急。它没有挂起,它只是推迟了一段时间MF Mail作曲家的开放。但这似乎是一个无关的错误。 –