Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSManagedObject作为存储,可连续分析原始数据_Objective C_Cocoa_Core Data_Nsmanagedobject - Fatal编程技术网

Objective c NSManagedObject作为存储,可连续分析原始数据

Objective c NSManagedObject作为存储,可连续分析原始数据,objective-c,cocoa,core-data,nsmanagedobject,Objective C,Cocoa,Core Data,Nsmanagedobject,这类似于我以前问过的一个问题,但现在我已经走得更远了,我仍然有一个关于NSManagedObject的“适当”子类的问题,因为昨晚我被告知,将大量非持久性属性和IVAR放在其中是一个“坏主意”。目前,我的NSManagedObject中有大量代码,而苹果的文档并没有真正说明这一点的“正确性”。仅供参考:代码是有效的,但我想问的是,前面是否有陷阱,或者以另一种方式进行操作是否有明显的改进 我的“对象”是不断增长的传入数据数组、跟踪该数据分析进度的属性/IVAR以及处理后的数据(输出)。所有这些都存

这类似于我以前问过的一个问题,但现在我已经走得更远了,我仍然有一个关于NSManagedObject的“适当”子类的问题,因为昨晚我被告知,将大量非持久性属性和IVAR放在其中是一个“坏主意”。目前,我的NSManagedObject中有大量代码,而苹果的文档并没有真正说明这一点的“正确性”。仅供参考:代码是有效的,但我想问的是,前面是否有陷阱,或者以另一种方式进行操作是否有明显的改进

我的“对象”是不断增长的传入数据数组、跟踪该数据分析进度的属性/IVAR以及处理后的数据(输出)。所有这些都存储在内存中,因为它增长非常快,并且不可能连续地重新生成/重新分析。实际持久化的NSManagedObject属性只是原始数据(定期保存,因为核心数据不支持NSMutableData)、一些基本属性以及与其他NSManagedObject的2个关系(1个是用户,另一个是数据的一组快照)。一次只能记录一个对象,尽管可以打开几十个对象进行查看(这可能需要在任何时候进行进一步处理)

插入实体的对象(管理核心数据的数据管理器)不可能包含所有的处理逻辑/变量,因为每个对象都需要至少几个数组/属性,这些数组/属性用作分析的中介和跟踪值。我个人认为,为每个正在使用的对象创建两个对象(NSManagedObject是存储,另一个对象是处理/临时存储)听起来很愚蠢

基本上,我能找到的所有使用NSManagedObjects的示例都有超简单的对象,比如坐标、地址簿条目、图片:基本上是静态的。在这种情况下,我可以看到在对象外部创建/修改它们的所有逻辑。然而,我的情况并不是那么简单,我还没有想出一个不涉及重复的替代方案


如果您有任何建议,我们将不胜感激。

您可以使用“包装器”,也就是说,一个类引用了您的一个托管对象实例,这个包装器将包含您的算法和非持久化算法。

首先,您说的是“算法和非持久化算法”让我觉得我解释得不够好。唯一持久化的数据是原始数据。但是,在加载对象(记录或读回/重新分析)时,还必须存在大量附加属性和数组,这些属性和数组对于每个对象都是唯一的(它们与特定数据直接相关)。第二,你能解释一下你觉得增加一个附加层会有什么帮助吗?例如,解释为什么您认为它会更好。有了一个附加层,您就不需要在NSManagedObject子类中放置所有那些“坏”元素。正如您已经被告知的,NSManagedObject是存储持久数据的,您不应该将其他东西放在那里(即使没有任何东西真正阻止您这样做,但它非常难看)。我建议您为一个托管对象使用一个包装器实例,并在包装器中使用KVO(键值观察)来通知正在更新的原始值。完成。如果假设NSManagedObject只是持久化数据,而不是“活”对象,那么我可以看到将两者分开的愿望。