2014-01-15 38 views
0

我們使用Xamarin.Mobile組件來獲取和存儲本地應用程序目錄中的照片。現在,當我存儲單張照片時,其工作正常,但如果我存儲多張照片並嘗試訪問這些照片,則只有最後一張圖像存在,所有其他圖像都將被刪除。我不會在代碼中的任何地方調用delete函數。Xamarin.Mobile組件多個文件保存被刪除而無需爲iOS調用刪除功能

我們正在爲iOS版製作應用程序,Android和我們有一些核心類是在這兩個項目鏈接

當它進入如圖所示的功能是最後調用堆棧,只有最後的圖像存在,所有的其他影像正在被刪除。 前三個函數來自我們的核心類,它們都在iOS和Android中鏈接。

我已啓用iTunes文件共享,圖像正在存儲在文檔文件夾內,我給每個圖像一個不同的名稱。

這裏是拍照的代碼: Random rand1 = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);

 picker = new MediaPicker(); 
     if(!picker.IsCameraAvailable) 
      return; 
     MediaPickerController controller = picker.GetTakePhotoUI (new StoreCameraMediaOptions { 
      Name = "Ticket"+rand1.Next(1, 1000000)+".jpg", 
      Directory = "" 
     }); 
     this.PresentViewController(controller, true, null); 
     controller.GetResultAsync().ContinueWith (t => { 
      // We need to dismiss the controller ourselves 
      this.PresentedViewController.DismissViewController (true,() => { 
       // User canceled or something went wrong 
       if (t.IsCanceled || t.IsFaulted) 
        return; 

       // We get back a MediaFile 
       MediaFile media = t.Result; 



       ticket.imagePaths.Add(media.Path); 

      }); 
     }, uiScheduler); 

這裏是我的應用程序輸出: 2014年1月15日15:17:40.445 CCR_Ticket_System_iOS [2063:60B]文件存在於TicketRepo:/私營/無功/移動/應用/ ABE44A50-7119-4BF9- 8DF9-DC50C80E7591/Documents/Ticket235666.jpg 2014-01-15 15:17:42.384 CCR_Ticket_System_iOS [2063:60b] TicketRepo中存在文件:/ private/var/mobile/Applications/ABE44A50-7119-4BF9-8DF9-DC50C80E7591/Documents/Ticket952511.jpg 2014-01-15 15:17:49.320 CCR_Ticket_System_iOS [2063:60b]文件不存在於DatabaseADO的SaveTicket中:/ private/var/mobile/Applications/ABE44A50-7119-4BF9-8DF9-DC50C80E7591 /Documents/Ticket235666.jpg 2014-01-15 15:17:49.323 CCR_Ticket_System_iOS [2063:60b]文件在DatabaseADO的SaveTicket中存在:/private/var/mobile/Applications/ABE44A50-7119-4BF9-8DF9-DC50C80E7591/Documents/Ticket952511.jpg

請讓我知道我做錯了什麼。如果您需要更多信息,請告訴我。我在最近2天內遇到了這個問題。

+0

請發佈保存圖片的代碼 – Jason

+0

@Jason,更新了該帖子的拍攝和存儲路徑的照片 – user3013635

回答

0

我剛剛遇到了這個問題,並且看到還沒有發佈解決方案。這是我想出的:

問題與MediaPicker有關。當調用mediaPicker.PickPhotoAsync(),mediaPicker.TakePhotoAsync()等時,它將返回MediaFile類型的對象。這個MediaFile有一個叫做「Path」的屬性,它包含一個包含文件路徑的字符串。我們存儲這個字符串以備後用。

當我們意識到MediaPicker如何實現時,問題就出現了。一旦MediaFile被處理掉,它就會刪除MediaFile所關聯的文件。由於我們讓MediaPicker超出範圍,文件被添加到列表後立即被刪除。

有幾個解決方案: 1)保留對MediaFile的引用,直到文件不再需要爲止。 2)將圖像複製到新的位置,以便MediaFile可以處理

我個人認爲選項1是一個更好的解決方案。