2012-07-31 54 views
0

我有一個應用程序編寫在Monotouch中,它提供的一個功能是拍攝照片,然後將其同步回服務器上的Sybase Sql Anywhere數據庫。此機制在我們的應用程序的Windows版本上正常工作,但在iOS上,我們遇到了有關將照片保存在iPad或iPhone上的Sybase Ultralite數據庫中的技術問題。簡而言之,如果我們在iPhone上將分辨率設置爲非常低,則照片可以正確保存,但如果分辨率較高,則會失敗。該問題與正在保存的圖像數據的大小有關。在iPad上,照片通常大於iPhone拍攝的照片,因此在iPad上保存到數據庫的失敗次數比iPhone更多。使用iOS存儲和同步圖像

無論如何,這只是我們的情況的一些背景和實際Ultralite問題不是這個問題的重點。我在這裏尋找的是替代解決方案Objective-CMonotouch)提供此功能。我立即考慮保存到本地數據庫,然後將照片數據複製回服務器,因爲我有很多數據庫複製的經驗。但也許有更好的方法來解決這個問題?

該解決方案必須允許應用程序:

  • 保存照片,以便它
  • 必須允許照片(即使該設備的應用程序或重啓關機後)在本地可用拍攝並保存離線,因爲互聯網連接並不總是可用的。
  • 將圖像數據同步回服務器數據庫,或將URL同步回到後臺的應用程序可以檢索照片。很顯然,在同步時,應用程序必須在線。

任何人都可以提出解決方案或API的,可以讓我提供這個功能,而不必同步圖像數據?我正在考慮將圖像保存到雲端,然後只同步一個可在後臺使用的URL來檢索照片。有什麼建議麼?

回答

1

從你寫的內容來看,我可能會建議你不要在iOS設備上正確保存圖像。它們上的內存非常有限,將批量的HR圖像保存在RAM中會導致內存警告和應用程序崩潰。您應該考慮使用CoreData將本地鏈接存儲到正在保存到磁盤的映像。我認爲,您熟悉UIImagePickerController委託回調,它允許您檢索您的UIImage並將其保存到您的應用程序的Documents目錄中,因此我省略了它。我不確定您的意思是「必須允許照片拍攝並保存爲離線」,因爲UIImagePickerControllerAVFoundation都不依賴於Internet連接。因此,爲了離線保存圖像,只需使用其中一種(如果您不需要在相機屏幕上顯示任何自定義用戶界面,並且開始使用起來更容易,則可以使用其中一種(UIImagePickerController更爲可取)。如果您需要同時同步多個圖像,則應顯示UIProgressBar並將圖像上傳到隊列中,而您所做的每個REST請求都是多部分數據請求,用於一次上載單個圖像。這樣你就不會有任何內存管理問題,你也可以使用拍攝的圖像的人力資源質量,沒有必要使用最低的一個。對於HTTP連接,您可能需要考慮使用ASIHTTPRequest,因爲它很簡單,使用起來非常簡單,並且可能會爲您節省一些時間,並且可以處理多部分請求。

+0

嗨尤金。感謝您的回答。是的,你是對的,如果使用CoreData存儲圖像然後再同步數據,那麼當照片拍攝時應用程序處於離線狀態這一事實是無關緊要的。我在考慮保存在雲中,這樣數據就不需要同步,但是應用程序的離線性使得這個選項不切實際。我之前使用過ASIHTTPRequest,並且必須同意使用它非常簡單。感謝您對此的建議。 – BruceHill 2012-08-02 08:09:35