在IOS nitWithContentOfFile中动态显示图像:' 方法返回 nil



我有一个便携式Xamarin应用程序,其中一些"特定覆盖"适用于Android和iOS。

我有一个带有图像的内容页面,需要从服务器下载。由于该图像不是服务器上的"公共",因此我无法使用简单的URL将图像添加到图像控件中。因此,我的代码正在下载图像,在本地保存,然后将图像URL传递给图像控件:

        string filePath = GetThumbnailPath();
        Image img = new Image
        {
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            WidthRequest = 150,
            HeightRequest = 150,
            Source =  FileImageSource.FromFile(filePath),
            Margin = new Thickness(0, 10, 0, 10)
        };     
        layout.Children.Add(img);

在Android上,一切都很好。在iOS上,图像保存到:

        string directory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        string filePath  = Path.Combine(directory, "thumbnail.jpg");

但是,当页面加载时,应用程序崩溃了:System.Exception:无法初始化类型的" Uikit.uiimage"的实例:本机'initwithContentsOffile:'方法返回 nil

我不能将图像更改为捆绑资源(其 Dynamic ),并且无法公开服务器调用(其处理程序需要标题参数或cookie)

在iOS上您可以使用此代码将图像保存到本地存储:

        var rootFolder = FileSystem.Current.LocalStorage;
        var folder = await rootFolder.CreateFolderAsync("Images", CreationCollisionOption.OpenIfExists);
        var file = await folder.CreateFileAsync("image.png", CreationCollisionOption.ReplaceExisting);
        var httpClient = new HttpClient();
        var buffer = await httpClient.GetByteArrayAsync(url);
        using (Stream stream = await file.OpenAsync(PCLStorage.FileAccess.ReadAndWrite))
        {
            stream.Write(buffer, 0, buffer.Length);
        }
        return file.Path;

您可以显示以下图像:

        var imageSource = new FileImageSource { File = filePath};
        MyPicture.Source = imageSource;

在定义mypicture的地方:

        <Image x:Name="MyPicture">

最新更新