【问题标题】:How to detect Xamarin.iOS on demand resource path after being downloaded?下载后如何检测 Xamarin.iOS 按需资源路径?
【发布时间】:2018-03-22 13:42:24
【问题描述】:

在我的 Xamarin.iOS 项目中,我添加了一个按需资源标记并实现了代码以使用在 NSBundleResourceRequest 实例上调用的 beginAccessingResourcesWithCompletionHandler 下载资源。

此 API 下载资源,然后在资源可用时调用完成块,但是当我尝试使用 UIImage.FromBundleNSBundle.MainBundle.PathForResource 在 UI 中获取图像时,它总是返回 null

如何在 Xamarin.iOS 中获取下载的“按需”资源的路径?

添加代码供参考-

request = new NSBundleResourceRequest(new[] { "OnLoad" });
        request.BeginAccessingResources((NSError obj) =>
        {
            if (obj != null)
                Console.WriteLine("Error occurred: {0}");
            else
            {
                NSOperationQueue.MainQueue.AddOperation(() =>
                {
                    InvokeOnMainThread(() => 
                    {
                        var imagePath1 = NSBundle.MainBundle.PathForResource("image1", "jpg");
                        var image = UIImage.FromFile(imagePath1);
                    });

                });
            }
        });

如果我将图像添加到 assets.xcassets 文件夹(1x、2x、3x),则无法下载图像。但是,如果我将图像直接添加到资源文件夹(只有一个图像 - 没有 1x 或 2x 或 3x),那么在下载 NSBundle.MainBundle.PathForResource 后会返回正确的路径

【问题讨论】:

  • 您是否尝试过 Environment.SpecialFolder 中列出的文件夹之一?Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  • 谢谢丹尼尔。试过这个,但对我不起作用。如果我将图像添加到 assets.xcassets 文件夹,则无法下载图像。但是,如果我将图像直接添加到资源文件夹中,那么在下载 NSBundle.MainBundle.PathForResource 后会返回正确的路径

标签: ios xamarin xamarin.ios


【解决方案1】:

首先我假设你正确设置On-Demand Resources并成功下载。

你可以试试

NSBundleResourceRequest request = xxxx;
request.BeginAccessingResources((NSError error)=> {
   if (error == null)
   {
      NSError err = null;
      string str = request.Bundle.BundlePath;
      NSFileManager fm = NSFileManager.DefaultManager;   
      string[] dirArray = fm.GetDirectoryContent(str, out err);
      var result = dirArray.Where(x => x.Contains(".png"));
   }
   else {
       request.EndAccessingResources();
   }
});

【讨论】:

  • 谢谢科尔。假设在上面的代码中 if (error == null) 那么我需要使用 NSFileManager 选项。但是应用程序在 imageArray 崩溃。引发 Objective-C 异常的原因。名称:NSInvalidArgumentException 原因:-[__NSSingleObjectArrayI evaluateWithObject:]:无法识别的选择器发送到实例
  • @Cole - 我正在使用 Xamarin.iOS。请检查上面的代码。我尝试了您的代码,但错误始终为空,因此我尝试不进行错误检查。但结果不包含下载的图像路径或文件名。
  • @Vishnu dirArray 的值是什么
  • 它包含 {string[25]} - 带有 dll、.exe、资产文件等的值
  • 这些是 dirArray 内容 - AssetPackManifestTemplate.plistAssets.carInfo.plistLaunchScreen.storyboardcMain.storyboardcMono.Security.dllMono.Security.pdbMonoTouchDebugConfiguration.txtmscorlib.dllmscorlib.pdbONDemad_nativeONDemad_native.exeONDemad_native.pdbOnDemandResources.plistPkgInforuntime-options .Core.dllSystem.Core.pdbSystem.dllSystem.pdbSystem.Xml.dllSystem.Xml.pdbXamarin.iOS.dllXamarin.iOS.dll.mdb
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多