2012-06-25 64 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

相關問題