0

コアデータを使用するアプリケーションを開発しています。私のアプリケーションでは、すべてのユーザーに同じデータベースを持たせたいと考えています。したがって、すべてのデバイスで同じコア データ オブジェクトを共有する必要があります。

その「同期」を行うために、この問題について説明したこの回答に関するプレゼンテーションを見つけました。プレゼンテーションでは、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 の間で行われます。プレゼンテーションで提案されたものなど

4

1 に答える 1

1

MyManagedObjectデータ モデル デザイン ツールで作成し、そのツール内の他のエンティティの親としても登録すると、これはほとんど機能するはずです。@synthesize(ステートメントのためにあなたはそれをしなかったと思います...それらは通常です@dynamic。)

修正すべきもう 1 つの問題は、オブジェクトのプロパティを変更したかどうか (self.modificationDateこの場合) を再度変更する前にテストする必要があることですwillSave。最初の変更後に設定されてクリアされる BOOL 値didSaveは、簡単にテストできます。

于 2012-06-25T20:00:59.360 に答える