1

我有一个Image : NSManagedObject有两个属性:NSString* localPathNSString* remoteUrl

当我通过调用save:&error托管对象上下文保存对象时,我希望它下载文件,当下载失败时,我希望保存操作也失败。

因为我有一个深度嵌套的数据库结构,其中包含对我的图像实体的多个引用,所以要找到我的所有图像以手动触发下载会很复杂。

这是否可能,如果可以,我如何取消保存或删除操作以使其失败?如果在模型中执行此操作是不好的做法,我应该在哪里执行此操作?

4

3 回答 3

2

可能可以按照您的描述进行操作,但这将是一个非常糟糕的主意。下载图像可能需要很长时间。在 Core Data 中保存更改可能需要一段时间。由于保存会影响需要图像的每个实例,因此您可能会进行长时间的操作,并将其变成可笑、疯狂、过长的操作。在每次图像下载完成之前,保存不会完成,这是一种非常不合理的依赖。

如果图像下载和保存更改完全相互分离,你会好得多。单独下载图像。如果对象的图像不可用,请使用某种占位符。

于 2013-10-04T17:17:52.933 回答
0

而不是save:开始下载过程,顺便说一句,它保存了整个托管对象上下文而不仅仅是一个对象,我会先开始下载。如果下载成功,您可以将图像写入磁盘,更新localPath并保存更改,如果下载失败,则根本不需要保存。

于 2013-10-04T16:20:06.250 回答
0

我认为您可能会对 MVCS(模型视图控制器服务/模型视图控制器存储)感兴趣。您可以将逻辑移至 Store 层。NSManagedObject如果下载成功,它将异步执行图像下载并创建。

您可以在以下位置找到有关它的一些信息:MVCS - 模型视图控制器服务https://softwareengineering.stackexchange.com/questions/184396/mvcs-model-view-controller-store

于 2013-10-04T16:27:45.923 回答