将 CoreData 数据块移动到单独的对象中

Posted

技术标签:

【中文标题】将 CoreData 数据块移动到单独的对象中【英文标题】:Moving CoreData data blob into separate object 【发布时间】:2017-07-14 06:44:13 【问题描述】:

我将 NSData 属性从 CoreData 对象中移出到一个单独的对象中,因此 self.pdfData 变为 self.pdf.data。这看起来像是管理辅助对象的创建和删除的正确方法吗?

- (void)setPdfData:(NSData *)pdfData

    if (!pdfData) 
        if (self.pdf) 
            [self.managedObjectContext deleteObject:self.pdf];
            self.pdf = nil;
        
    
    else 
        if (!self.pdf) 
            self.pdf = [BaseFormPDF insertInManagedObjectContext:self.managedObjectContext];
        
        self.pdf.data = pdfData;
    


- (NSData *)pdfData

    return self.pdf.data;

【问题讨论】:

为什么你还要将二进制 pdf 数据保存到核心数据中?将文件写入应用程序沙箱中的本地文档目录并在核心数据中写入文件的相对路径,我相信这是更清晰的方法 这是一个有效的点。 【参考方案1】:

是的,这是一个很好的方法。

1) 通过将数据移动到单独的实体,您可以获取主要实体,而无需将大数据加载到内存中。

2) managedObjects 上的 psudo 属性真的很酷,并且非常适合这样的事情。但我会担心在二传手做太多事情。在这种情况下,我认为没关系,但做更多可能会导致问题。如果程序员只是设置thing.pdfData = data 并且发生了很多程序员没想到的事情,这可能会导致错误。

【讨论】:

无论如何我都无法在二传手中做更少的事情。有什么替代方法的建议吗? 我觉得你现在做的很好。但这只是一个警告,不要做太多。

以上是关于将 CoreData 数据块移动到单独的对象中的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:将对象从一个持久存储移动到另一个

将所有 Javascript 移动到 Django 中的单独文件

CoreData 和 NSManagedObjectContext

使用 Core Data 存储位置数据

面向对象

以一个名称将多个对象保存到 coredata