2012-06-25 65 views
0

我正在开发使用核心数据的应用程序。在我的应用程序中,我希望每个用户都拥有相同的数据库。所以我希望所有的设备共享相同的核心数据对象。以编程方式将属性添加到核心数据

为了做到这一点“同步”我发现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值是测试的简单事情。

+0

这正是我需要的!非常感谢你! – Luke

相关问题