C# Xamarin构建的iOS共享扩展中的NSURL absoluteString崩溃
我们一直在使用共享扩展(来自safari)构建类似messenger的应用程序。 现在我们遇到了一个大问题,当我试图获取url字符串时,扩展崩溃了 崩溃: 踏面1 未处理的异常: 0单声道0x01746691单声道句柄异常内部+2168 1单声道0x01745e13单声道句柄异常+30 2单声道0x0173ed2d单声道手臂抛出异常+104 3 com.XXX.ShareExtension 0x00268e44抛出\u异常+64 在/Users/builder/data/lanes/2077/d8e9592a/source/maccore/Runtime/Delegates.generated.cs:100中的ObjCRuntime.Runtime.throw_ns_异常(intptr)[0x00000] at(包装器本机到托管)ObjCRuntime.Runtime.throw_ns_异常(intptr) 6 com.XXX.ShareExtension 0x006fe5c0 xamarin_抛出异常+52 7 com.XXX.ShareExtension 0x007004b0\u ZL17exception\u handlerP11NSException+224 8芯基础0x242cbba9+644 9 libobjc.A.dylib 0x35c7f087+174 10 libc++abi.dylib 0x35463e17+78 11 libc++abi.dylib 0x354638f7\uuu cxa\u rethrow+102 12 libobjc.A.dylib 0x35c7ef47 objc_异常_rethrow+42 也就是说mono崩溃了。再进一步看,我看到: 踏板2 iOS_ShareExtension[336]:未处理的托管异常: 抛出Objective-C异常。名称:NSInvalidArgumentException原因: NSGetSizeAndAlignment():不支持的类型编码规范“Y”位于“Y”的位置≈∏0i≈∏√™o≈∏√ª“in”YÄh≈∏0i≈∏√™o≈∏√ª’ 本机堆栈跟踪: 0芯基础0x242cb883+150 1 libobjc.A.dylib 0x35c7edff objc_异常_抛出+38 2芯基础0x242cce71+536 3芯基础0x242cef69+60 4芯基础0x241f9515+516 5 libextension.dylib 0x355c2e47+150 6 com.XXX.ShareExtension 0x000643f4 包装器\u托管\u到\u本地\u对象运行时\u消息传递\u无效\u对象运行\u msgSend\u IntPtr\u IntPtr\u IntPtr\u IntPtr\u IntPtr\u IntPtr\u IntPtr+128 7 com.XXX.ShareExtension 0x0003a5e8基础提供程序加载项字符串基础字典系统操作基础对象基础错误+384 8 com.XXX.ShareExtension 0x0000c5d4 iOS\u ShareExtension\u ShareViewController\u ViewDidLoad+1048 我的崩溃代码:C# Xamarin构建的iOS共享扩展中的NSURL absoluteString崩溃,c#,ios,xamarin,mono,ios-app-extension,C#,Ios,Xamarin,Mono,Ios App Extension,我们一直在使用共享扩展(来自safari)构建类似messenger的应用程序。 现在我们遇到了一个大问题,当我试图获取url字符串时,扩展崩溃了 崩溃: 踏面1 未处理的异常: 0单声道0x01746691单声道句柄异常内部+2168 1单声道0x01745e13单声道句柄异常+30 2单声道0x0173ed2d单声道手臂抛出异常+104 3 com.XXX.ShareExtension 0x00268e44抛出\u异常+64 在/Users/builder/data/lanes/2077/d
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。此修复程序可以解决此问题: 我会再次检查它是否真的到达了您认为导致问题的那一行(使用Console.WriteLine,因为调试附件不适用于扩展)。如果objectLoaded不是NSUrl,则强制转换将返回null,我希望出现null指针异常,而不是模糊的编码错误
编辑:引用的bug修复程序还没有通过Xamarin alpha通道,但是通过公开回调方法,问题似乎得到了解决。在我的例子中,我使用的是内联委托,但这只是“幕后”的私有方法。什么是“objectLoaded”?如果是LoadItem completionHandler中接收的数据,则它不是NSUrl,而是Url返回的数据。键入将其强制转换为url并尝试访问AbsoluteString将导致错误(堆栈跟踪显示其二进制数据)是的,它是:private void OnItemLoaded(NSObject objectLoaded,NSError error)您似乎是对的,现在我想知道,为什么它有时会工作?