使用MFMailComposeViewController时Monotouch iOS 6崩溃 [英] Monotouch iOS 6 crash when using MFMailComposeViewController
问题描述
我在Monotouch iOS 6中使用MFMailComposeViewController时遇到一个奇怪的错误,但它在iOS 5.1中运行良好:
I get a strange error when I use MFMailComposeViewController in Monotouch iOS 6, but it worked fine in 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 on the simulator:
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
同样在模拟器上,应用程序挂起一段时间才会抛出异常在调试器和崩溃上:
Also on the simulator the app hangs for some time before throwing an exception on the debugger and crashing:
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
设备上的原生堆栈跟踪:
Native stacktrace on the device:
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
任何帮助表示赞赏。
谢谢。
Any help is appreciated. Thanks.
更新:
不幸的是,这里似乎有多个错误。
Unfortunately It seems that there is more than one bug here.
在我的情况下,Mail Composer的崩溃不是由外观或
属性字符串引起的。我测试了所有可能的连接,但我的代码崩溃了。
In my case the crash of the Mail Composer was not caused by an Appearance or an attributed string. I tested all possible connection, but my code crashes.
所以我开始逐行评论我的所有代码,然后我把它钉了出来:
So I started commenting all my code line by line, and I nailed it:
这是In App Purchase代码。
It's the the In App Purchase code.
我正在使用xamarin网站上的In App Purchase示例中的代码。
I'm using the code from the In App Purchase sample on the xamarin website.
如果我使用SKProductRequest类仅对此行发表评论:
If I comment just this line using the SKProductRequest class:
productsRequest.Start();
productsRequest.Start();
MFMailComposer打开并完美运行!
The MFMailComposer opens and works perfectly fine!
所以我在最初的Xamarin示例项目上测试了MFMailComposer:
So I tested the MFMailComposer on the original Xamarin sample project:
http://docs.xamarin.com/ios/教程/ In-App_Purchasing
http://docs.xamarin.com/@api/deki/files/3300/=InAppPurchaseSample.zip
http://docs.xamarin.com/ios/tutorials/In-App_Purchasing http://docs.xamarin.com/@api/deki/files/3300/=InAppPurchaseSample.zip
我刚刚将此代码添加到NonConsumableViewController类:
I just added this code to the NonConsumableViewController class:
/// <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, 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
///
当我按下按钮时,它会挂起。
And when i push the button it hangs.
更新:
我尝试了6.0.2修补程序(抱歉等待,但我不得不将我的代码恢复到原始状态)。外观错误现在已经消失。
I tried the 6.0.2 hotfix (sorry for the wait, but I had to revert my code to the original state). The appearance bug is gone now.
SKProductRequest类的问题似乎不同而且不太紧急。它没有挂起,它只是推迟了MF Mail作曲家的开放一段时间。但这似乎是一个无关的错误。
The problem with the SKProductRequest class seems a different one and less urgent. It doesn't hang, it just delays the opening of the MF Mail composer for a while. But this seems an unrelated bug.
这是错误引用:
https://bugzilla.xamarin.com/show_bug.cgi?id=7443
推荐答案
这可能会有所帮助(来自Xamarin错误)
This might help (from the 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吗?
I get the problem if I have the commented bit in my code, but not if it's commented out. Are you using the UIAppearance stuff?
这篇关于使用MFMailComposeViewController时Monotouch iOS 6崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!