使用iOS存储和同步图像

时间:2012-07-31 08:29:30

标签: objective-c ios xamarin.ios synchronization

我有一个用Monotouch编写的应用程序,它提供的一个功能是拍摄照片,然后将照片同步回我们服务器上的Sybase Sql Anywhere数据库。这个机制在我们应用程序的Windows版本上运行良好,但在iOS我们遇到了与在iPad或iPhone上的Sybase Ultralite数据库中保存照片有关的技术问题。非常简单,如果我们在iPhone上将分辨率设置为非常低,则照片可以正确保存,但如果分辨率更高,则会失败。该问题与正在保存的图像数据的大小有关。在iPad上,照片通常比使用iPhone拍摄的照片更大,因此保存到数据库的频率会因iPad而不是iPhone而失败。

无论如何,这只是我们情况的一些背景,实际的Ultralite问题不是这个问题的焦点。我在这里寻找的是替代解决方案Objective-CMonotouch)来提供此功能。我立即考虑保存到本地数据库,然后将照片数据复制回服务器,因为我有很多数据库复制经验。但也许有更好的方法来解决这个问题?

解决方案必须允许应用程序:

  • 保存照片,使其在本地可用(即使在关闭应用程序或重启设备后)
  • 必须允许拍摄照片并离线保存,因为并非始终可以使用互联网连接。
  • 将图像数据同步回服务器数据库或同步URL,后台办公室的应用程序可以检索照片。显然,在同步时,应用程序必须在线。

任何人都可以建议可以让我提供此功能而无需同步图像数据的解决方案或API吗?我正在考虑将图像保存到云中,然后只同步可以在后台使用的URL来检索照片。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

根据您所写的内容,我可能会建议您不要在iOS设备上正确保留图像。它们上的内存非常有限,在RAM中保留批量的HR图像会导致内存警告和应用程序崩溃。您应该考虑使用CoreData存储指向要保存到磁盘的映像的本地链接。我认为,您熟悉UIImagePickerController委托回调,它允许您检索UIImage并将其保存到Application的Documents目录中,所以我省略了它。我不确定“必须允许拍摄照片并离线保存”是什么意思,因为UIImagePickerControllerAVFoundation都不依赖于互联网连接。因此,为了离线保存图像,只需使用其中一种(UIImagePickerController更为可取,如果您不需要在相机屏幕上显示任何自定义UI,并且更容易开始使用)。如果您需要同时同步多个图像,则应显示UIProgressBar并将图像上传到队列中,而您正在进行的每个REST请求都是一个多部分数据请求,用于一次上传单个图像。这样您就不会对内存管理有任何问题,也可以使用HR质量拍摄图像,不需要使用最低的图像。对于HTTP连接,您可能需要考虑使用ASIHTTPRequest,因为它很简单,使用非常简单,并且可以节省您多部分请求的时间。