以编程方式将属性添加到 Core Data
Posted
技术标签:
【中文标题】以编程方式将属性添加到 Core Data【英文标题】:Programmatically add attributes to Core Data 【发布时间】:2012-06-25 19:23:54 【问题描述】:我正在开发一个使用核心数据的应用程序。在我的应用程序中,我希望每个用户都拥有相同的数据库。所以我希望所有设备共享相同的核心数据对象。
为了实现“同步”,我在this answer 上找到了一个讨论这个问题的演示文稿。在演示中,建议我为 Core Data 中的每个对象添加“creationDate”和“modificationDate”等属性。
为此,我尝试将 NSManagedObject (MyManagedObject) 子类化,以便将这些属性添加到核心数据中的每个对象。我还创建了我拥有的每个 NSManagedObject 子类(由模型自动生成)子类 MyManagedObject。
问题是我添加到 NSManagedObject 子类的属性没有持久化在数据库中。因此,当我关闭并重新打开应用程序时,'creationDate' 变为 (null)。
这是我的一些代码(标题):
@interface MyManagedObject : NSManagedObject
@property (nonatomic, retain) NSDate * modificationDate;
@property (nonatomic, retain) NSDate * creationDate;
@end
这是 .m 文件:
@implementation MyManagedObject
@synthesize modificationDate, creationDate;
-(void)willSave
[super willSave];
self.modificationDate = [NSDate date];
-(void)awakeFromInsert
[super awakeFromInsert];
[self setCreationDate:[NSDate date]];
[self setModificationDate:[NSDate date]];
任何帮助、指导或阅读将不胜感激。我已经为此苦苦挣扎了一段时间。我需要一种比将这些属性添加到模型中的每个实体更好的方法。提前致谢
PS:我打算在服务器中拥有一个“真相数据库”(一个 .sqlite 文件)。同步将在服务器和 iPhone 之间进行。如演示文稿中建议的那样
【问题讨论】:
【参考方案1】:如果您在数据模型设计工具中创建 MyManagedObject
并将其注册为该工具内其他实体的父级,这应该几乎可以工作。 (我怀疑你没有这样做是因为 @synthesize
声明......那些通常是 @dynamic
。)
要解决的另一个问题是,您必须在再次更改对象之前测试您是否已经更改了对象的属性(在您的情况下为self.modificationDate
),否则willSave
将继续被调用。在第一次更改后设置并在 didSave
中清除的 BOOL 值很容易测试。
【讨论】:
这正是我所需要的!非常感谢!以上是关于以编程方式将属性添加到 Core Data的主要内容,如果未能解决你的问题,请参考以下文章