我正在开发一个使用核心数据的应用程序。在我的应用程序中,我希望每个用户都拥有相同的数据库。所以我希望所有设备共享相同的核心数据对象。
为了实现'同步',我在this answer上发现了一个讨论此问题的演示文稿。在演示文稿中,建议我将“creationDate”和“modificationDate”等属性添加到Core Data中的每个对象。
为此,我尝试将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之间进行。如演示文稿中建议
答案 0 :(得分:1)
如果您在数据模型设计工具中创建MyManagedObject
并将其注册为该工具中其他实体的父级,则这几乎可以正常工作。 (我怀疑你没有这样做是因为@synthesize
声明......那些通常是@dynamic
。)
要解决的另一个问题是,您必须先测试是否已经更改了对象的属性(在您的情况下为self.modificationDate
),然后再次更改它,否则willSave
继续被调用。在第一次更改后设置并在didSave
中清除的BOOL值是一个很容易测试的事情。