抛出异常的IMvxResourceLoader的GetTextResource方法

时间:2014-08-21 17:09:32

标签: ios xamarin mvvmcross

我正在尝试创建一个使用mvvmcross框架的iOS项目。我已经获得了适用于Windows的项目,并且我试图让它在iOS上运行。当我运行代码时,我遇到了一个看似基本的问题,但似乎无法弄清楚。

以下是代码

public Models.Config GetAppConfig()
    {
        var configResourceLoaded = Mvx.Resolve<IMvxResourceLoader>();
        string configText = string.Empty;
        try
        { 
            configText = configResourceLoaded.GetTextResource("Assets/AppData/Config.json");
        }
        catch (Exception noFile) {
            string f = "ff";
            f = f + "ff";
        }

        var serializer = Mvx.Resolve<IMvxJsonConverter>();
        return serializer.DeserializeObject<Models.Config>(configText);
    }

configText = configResourceLoaded.GetTextResource("Assets/AppData/Config.json");会导致代码抛出异常"Cannot load resource "Assets/AppData/Config.json""

我在iOS项目中包含了该文件夹结构(Windows项目中存在类似的文件夹结构)。

我已尝试将Config.json文件的构建操作设置为“内容”和“内容”。和&#39; BundleResource&#39;但它仍然无法奏效。

另外,在我的Setup.cs中,要注册IMvxResourceLoader我有以下代码。

Mvx.RegisterType<IMvxResourceLoader, MvxTouchResourceLoader>();

关于我做错的任何想法?为什么不加载文件?

1 个答案:

答案 0 :(得分:0)

IMvxResourceLoader使用IMvxFileStore。查看您使用的方法FullPath。仔细观察it looks like this

public const string ResScheme = "res:";
protected override string FullPath(string path)
{
    if (path.StartsWith(ResScheme))
        return path.Substring(ResScheme.Length);

    return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), path);
}

因此,除非您在res:之前添加路径,否则预计您正在查看MyDocuments

将您的路径更改为:

res:/Assets/AppData/Config.json