我们一直在建立信使类似应用程序的分享扩展(来自safari)。 现在我们遇到了一个大问题,当我试图获取url字符串
时,扩展崩溃了CRASH:
踏1
未处理的例外:
0 Mono 0x01746691 mono_handle_exception_internal + 2168
1 Mono 0x01745e13 mono_handle_exception + 30
2 Mono 0x0173ed2d mono_arm_throw_exception + 104
3 com.XXX.ShareExtension 0x00268e44 throw_exception + 64
在/Users/builder/data/lanes/2077/d8e9592a/source/maccore/runtime/Delegates.generated.cs:100中的ObjCRuntime.Runtime.throw_ns_exception(intptr)[0x00000] at(包装器本机到托管)ObjCRuntime.Runtime.throw_ns_exception(intptr)< 0x00048>
6 com.XXX.ShareExtension 0x006fe5c0 xamarin_throw_ns_exception + 52
7 com.XXX.ShareExtension 0x007004b0 _ZL17exception_handlerP11NSException + 224
8 CoreFoundation 0x242cbba9 + 644
9 libobjc.A.dylib 0x35c7f087 + 174
10 libc ++ abi.dylib 0x35463e17 + 78
11 libc ++ abi.dylib 0x354638f7 __cxa_rethrow + 102
12 libobjc.A.dylib 0x35c7ef47 objc_exception_rethrow + 42
这意味着单声道崩溃。进一步看,我看到:
踏2
iOS_ShareExtension [336]:未处理的托管例外:
抛出Objective-C异常。名称:NSInvalidArgumentException原因:
NSGetSizeAndAlignment():不支持的类型编码规范'Y'在'Y,'h≈Π0i≈Π√™o≈Π√ª'在'Y,'h≈Π0i≈Π√™o≈Π√ ª'
本机堆栈跟踪:
0 CoreFoundation 0x242cb883 + 150
1 libobjc.A.dylib 0x35c7edff objc_exception_throw + 38
2 CoreFoundation 0x242cce71 + 536
3 CoreFoundation 0x242cef69 + 60
4 CoreFoundation 0x241f9515 + 516
5 libextension.dylib 0x355c2e47 + 150
6 com.XXX.ShareExtension 0x000643f4 wrapper_managed_to_native_ObjCRuntime_Messaging_void_objc_msgSend_IntPtr_IntPtr_IntPtr_intptr_intptr_intptr_intptr_intptr + 128
7 com.XXX.ShareExtension 0x0003a5e8 Foundation_NSItemProvider_LoadItem_string_Foundation_NSDictionary_System_Action_2_Foundation_NSObject_Foundation_NSError + 384
8 com.XXX.ShareExtension 0x0000c5d4 iOS_ShareExtension_ShareViewController_ViewDidLoad + 1048
我的代码崩溃了:
NSExtensionItem content = ExtensionContext.InputItems [0];
foreach (NSItemProvider item in content.Attachments) {
if (item.HasItemConformingTo ("public.url")){
item.LoadItem (UTType.URL,null, OnItemLoaded);
break;
}
}
然后:
NSUrl url = objectLoaded as NSUrl;
_sharedURl = url.AbsoluteString; // THIS CRASH!!!
知道如何绕过这个吗?我甚至试过以各种方式转换这个NSUrl。
答案 0 :(得分:0)
此解决方案可以解决此问题:https://bugzilla.xamarin.com/show_bug.cgi?id=34518
我会仔细检查它是否真的到达了您认为导致问题的线路(使用Console.WriteLine,因为调试附件不适用于扩展)。如果objectLoaded不是NSUrl,则强制转换将返回null,我希望有一个空指针异常,而不是一个模糊的编码错误。
编辑:引用的错误修复尚未进入Xamarin alpha通道,但问题似乎是通过将回调方法公开来解决的。在我的情况下,我使用的是内联代理,但这只是一种私有方法"在幕后"。