首页 > 解决方案 > NSBundle PathsForResources 在下载按需资源包后返回 null

问题描述

我的团队在使用 Apple 的按需资源框架时遇到了一个非常奇怪的问题。这是一个随机发生的问题,用户将成功下载我们的资源之一,但是当我们尝试通过 NSBundle.PathsForResources() 访问该资源的路径时,它不会出现。当用户使用特定资源标签进入此状态时,我们还没有找到解决问题的方法。每次访问应用程序的这一部分时,我们的代码都会尝试重新获取受影响的资源标签,因此这不是不重新获取的问题,我们肯定会获取并成功下载。奇怪的是,卸载应用程序并重新安装甚至无法修复这种损坏状态。人们会假设在 iOS 上删除应用程序和重新安装之间没有任何转移,但这里似乎并非如此。此外,这发生在看似随机的资产上,没有影响某些按需资源包的模式,在所有情况下都不同。一旦资源标签被“变砖”,它就会保持这种状态。有什么想法可能导致此问题/我们可以尝试解决什么问题?

下载代码:

        // create and initialize new resource request
    public async Task CreateODRResourceRequest(string tag)
    {
        if (string.IsNullOrWhiteSpace(tag))
        {
            throw new ArgumentNullException(nameof(tag));
        }

        // Create resource request
        var request = new NSBundleResourceRequest(new[] { tag });

        // Set highest loading priority
        request.LoadingPriority = NSBundleResourceRequest.LoadingPriorityUrgent;

        _currentResourceRequest = request;

        var resourcesAlreadyAvailable = await request.ConditionallyBeginAccessingResourcesAsync();

        // ensure we only download resource if it's not already on the device
        if (!resourcesAlreadyAvailable)
        {
            await request.BeginAccessingResourcesAsync();
        }
    }

标签: iosxamarinapp-storensbundleon-demand-resources

解决方案


推荐阅读