2017-03-13 47 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