Xamarin构建的iOS共享扩展中的NSURL absoluteString崩溃
我们一直在使用共享扩展(来自safari)构建像app一样的应用程序。 现在,我们已经遇到了一个大问题,扩展崩溃,当我尝试获取URL字符串Xamarin构建的iOS共享扩展中的NSURL absoluteString崩溃
CRASH:
胎面1
未处理的异常:
0单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
在ObjCRuntime.Runtime.throw_ns_exception(IntPtr的)[0x00000]在/用户/助洗剂/数据/通道/ 2077/d8e9592a /源极/ maccore /运行/ Delegates.generated.cs:100 在(包装机到管理)ObjCRuntime.Runtime.throw_ns_exception(IntPtr的)< 0x00048>
6 com.XXX.ShareExtension 0x006fe5c0 xamarin_throw_ns_exception + 52
7 com.XXX.ShareExtension 0x007004b0 _ZL17exc eption_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
这意味着单声道的CRA他是。寻找进一步我看到:
胎面2
iOS_ShareExtension [336]:未处理的托管异常:
Objective-C中的异常。名称:NSInvalidArgumentException原因:
NSGetSizeAndAlignment():不受支持的类型编码规范'Y'在'Y'Äh?Π0i≈Π√™o≈Π√ª'in'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融为一体。 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。
这可以通过此修复程序来解决:https://bugzilla.xamarin.com/show_bug.cgi?id=34518
我会仔细检查,它实际上让你认为是造成问题的原因(使用Console.WriteLine因为调试连接不用于扩展工作)就行了。如果objectLoaded不是NSUrl,那么强制转换将返回null,我期望一个空指针异常,而不是一个模糊的编码错误。
编辑:引用的错误修复还没有通过Xamarin alpha通道,但问题似乎是通过公开回调方法解决的。在我的情况下,我使用了内联代理,但这只是一个“幕后”的私有方法。
什么是“objectLoaded”?如果它是在LoadItem completionHandler中接收到的数据,那么它不是NSUrl,而是Url返回的数据。类型强制转换到一个URL并试图访问AbsoluteString会导致故障(你的堆栈跟踪似乎显示它的二进制数据) – SushiHangover
是的,这就是: 私人无效OnItemLoaded(NSObject的objectLoaded,NSError错误) 看来你是对的,现在我想知道,为什么它有时会起作用? – DivisionByNullPointer