Xamarin.iOS的PCL存储问题

Xamarin.iOS的PCL存储问题,ios,xamarin,storage,Ios,Xamarin,Storage,我已经用Xamarin编写了我的应用程序,首先在Android上测试,然后在iOS上测试。在安卓系统上一切正常,而不是在iOS上。我的问题与PCLStorage有关,读取文件内容时失败,因为GetFileAsync结果是null,而不是CheckExistsAsync结果 我的代码是: public static async Task loadMyFile(Func<bool, Task> result) { IFolder rootFolder = FileSystem.C

我已经用Xamarin编写了我的应用程序,首先在Android上测试,然后在iOS上测试。在安卓系统上一切正常,而不是在iOS上。我的问题与
PCLStorage
有关,读取文件内容时失败,因为
GetFileAsync
结果是
null
,而不是
CheckExistsAsync
结果

我的代码是:

public static async Task loadMyFile(Func<bool, Task> result) {
    IFolder rootFolder = FileSystem.Current.LocalStorage;
    await rootFolder.CheckExistsAsync("myfile.txt").ContinueWith(async (checkExistsTask) => {
        if (checkExistsTask.Result == ExistenceCheckResult.FileExists) {
            await rootFolder.GetFileAsync("myfile.txt").ContinueWith(async (getFileTask) => {
                try
                {
                    await getFileTask.Result.ReadAllTextAsync().ContinueWith(async (readTextTask) => {
                        try
                        {
                            if (!string.IsNullOrEmpty(readTextTask.Result))
                            {
                                doWork(readTextTask.Result);
                                await result(true);
                                return;
                            }
                            else
                            {
                                await result(false);
                                return;
                            }
                        }
                        catch (Exception e)
                        {
                            await result(false);
                            return;
                        }
                    });
                }
                catch (Exception e)
                {
                    await result(false);
                    return;
                }
            });
        } else {
            await result(false);
            return;                 
        }
    });
}
公共静态异步任务loadMyFile(Func结果){
IFolder rootFolder=FileSystem.Current.LocalStorage;
等待rootFolder.CheckExistsAsync(“myfile.txt”).ContinueWith(异步(checkExistsTask)=>{
if(checkExistsTask.Result==ExistenceCheckResult.FileExists){
等待rootFolder.GetFileAsync(“myfile.txt”).ContinueWith(异步(getFileTask)=>{
尝试
{
等待getFileTask.Result.ReadAllTextAsync().ContinueWith(异步(readTextTask)=>{
尝试
{
如果(!string.IsNullOrEmpty(readTextTask.Result))
{
doWork(readTextTask.Result);
等待结果(真);
返回;
}
其他的
{
等待结果(假);
返回;
}
}
捕获(例外e)
{
等待结果(假);
返回;
}
});
}
捕获(例外e)
{
等待结果(假);
返回;
}
});
}否则{
等待结果(假);
返回;
}
});
}
有什么想法吗?
谢谢。

我不知道你在等待任务时为什么要在这里使用
ContinueWith

我可能会这样写代码:

public static async Task loadMyFile(Func<bool, Task> result) 
{
    IFolder rootFolder = FileSystem.Current.LocalStorage;
    var exists = await rootFolder.CheckExistsAsync("myfile.txt");
    if (exists == ExistenceCheckResult.FileExists) 
    {
        var file = await rootFolder.GetFileAsync("myfile.txt");
        try
        {
            var text = await file.ReadAllTextAsync();
            if (!string.IsNullOrEmpty(text))
            {
                doWork(text);
                await result(true);
                return;
            }
            else
            {
                await result(false);
                return;
            }
        }
        catch (Exception e)
        {
            await result(false);
            return;
        }
    } else {
        await result(false);
        return;                 
    }
}

你是对的。现在没有连续的工作完美:)谢谢你的回拨,这对我来说很重要,还有另一个原因…非常感谢
public static async Task<bool> loadMyFile() 
{
    IFolder rootFolder = FileSystem.Current.LocalStorage;
    var exists = await rootFolder.CheckExistsAsync("myfile.txt");
    if (exists == ExistenceCheckResult.FileExists) 
    {
        var file = await rootFolder.GetFileAsync("myfile.txt");
        try
        {
            var text = await file.ReadAllTextAsync();
            if (!string.IsNullOrEmpty(text))
            {
                doWork(text);
                return true;
            }
        }
        catch (Exception e)
        {
        }
    }

    return false;
}