2017-03-13 39 views
2

我有一个可移植的xamarin应用程序,其中有一些针对android和ios的“特定覆盖”。在IOS中动态显示图像xamarin - nitWithContentsOfFile:'方法返回无

我有一个需要从服务器上下载图像的内容页面。 由于服务器上的图像不是“公开”,我无法使用简单的URL将图像添加到图像控件。 所以我的代码下载图像,它保存到本地,然后通过图像URL到Image控件:

 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 :'方法返回

我不能改变形象是一个捆绑的资源(其动态),不能使服​​务器调用公开(它的处理Require头参数或Cookie)

回答

2

在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是定义d有:

 <Image x:Name="MyPicture"> 
+0

都能跟得上... System.Exception的:无法初始化类型 'UIKit.UIImage' 的一个实例:本机 'initWithContentsOfFile:' 方法返回零。 通过将MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure设置为false,可以忽略此情况。 –

+0

我从项目中复制/粘贴它,它按预期工作。您可以在演示项目中尝试它,如果它在您的项目中使用它的方式发生变化。当它是这个例外? – Uros