from app objective-c ios6 xamarin.ios mfmailcomposeviewcontroller

objective-c - app - swift 3 send email



Monotouch iOS 6 falla al usar MFMailComposeViewController (1)

Me sale un error extraño cuando uso MFMailComposeViewController en Monotouch iOS 6, pero funcionó bien en iOS 5.1:

*** Assertion failure in NSDictionary *_UIRecordArgumentOfInvocationAtIndex(NSInvocation *, NSUInteger, BOOL)(), /SourceCache/UIKit/UIKit-2372/UIAppearance.m:1118

Aquí está el código:

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 (); } }

Pila de pila nativa en el simulador:

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

También en el simulador, la aplicación se cuelga durante un tiempo antes de lanzar una excepción sobre el depurador y el bloqueo:

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

Pila de pila nativa en el dispositivo:

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

Cualquier ayuda es apreciada. Gracias.

ACTUALIZAR:

Desafortunadamente, parece que hay más de un error aquí.

En mi caso, el bloqueo del Mail Composer no fue causado por una Apariencia o una cadena atribuida. Probé todas las conexiones posibles, pero mi código falla.

Así que empecé a comentar todo mi código línea por línea, y lo crucé:

Es el código de compra In App.

Estoy usando el código de la muestra En la compra de la aplicación en el sitio web de xamarin.

Si comento solo esta línea usando la clase SKProductRequest:

productsRequest.Start ();

¡MFMailComposer se abre y funciona perfectamente bien!

Así que probé MFMailComposer en el proyecto de muestra original de Xamarin:

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

Acabo de agregar este código a la clase 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 ///

Y cuando presiono el botón se cuelga.

ACTUALIZAR:

Probé la revisión 6.0.2 (disculpe la espera, pero tuve que revertir mi código al estado original). El error de apariencia ya no está.

El problema con la clase SKProductRequest parece diferente y menos urgente. No cuelga, solo demora la apertura del compositor de MF Mail por un tiempo. Pero esto parece un error no relacionado.

Esta es la referencia de error: https://bugzilla.xamarin.com/show_bug.cgi?id=7443


Esto podría ayudar (del error Xamarin)

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);

Me sale el problema si tengo el bit comentado en mi código, pero no si está comentado. ¿Estás usando el material de UIAppearance?