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