既存のプロジェクトでは、プロジェクトが作成されてからずっと後に Core Data を導入しようとしたため、そのモデルは既に整っています。xcdatamodel を作成し、唯一のクラスを追加しました。そのクラスは、アプリケーション内のオブジェクトのグローバル ストレージとして機能する必要があります。クラスは NSManagedObject を適切に実装しており、コンテキストで作成および保存され、フェッチ結果とともに取得されることを確認しました。
このクラスにデータを保存するには、NSMutableArray を使用します。しかし、これはうまくいきません。このクラスのフラグメントを次に示します。
@interface WZMPersistentStore : NSManagedObject<NSCoding> {
NSMutableArray *persistentStorage;
}
@property(nonatomic,retain) NSMutableArray *persistentStorage;
-(void)add:(id)element;
-(void)remove:(id)element;
-(id)objectAtIndex:(NSUInteger)index;
-(NSUInteger)num;
@end
実装では、次のように initWithEntity もオーバーライドします。
- (id)initWithEntity:(NSEntityDescription*)entity insertIntoManagedObjectContext:(NSManagedObjectContext*)context {
NSLog(@"init with entity");
[super initWithEntity:entity insertIntoManagedObjectContext:context];
return [self init];
}
init メソッドは変更可能な配列のみを初期化します。ログから、エンティティの作成時にアプリ デリゲートによって適切に呼び出されることがわかります。add メソッドはメッセージ insertObject をpersistentStorageに送信するだけです。これから来る質問:
- 私は「概念的に」正しくやっていますか?つまり、管理対象オブジェクトにインスタンス変数を持ち、私のように初期化するのは正しいですか?
- nsがpersistentStorageのサイズをログに記録すると、addObjectメッセージの直後にログを記録しても常に0になります(編集:それは真実ではありません。もう一度確認したところ、正しく1が追加されました)。
- 管理対象オブジェクトクラスからpersistentStorageに格納されるオブジェクトは、属性を持つ通常のクラスです。私は彼らと何かする必要がありますか?実行時にエラーが発生していないため、そうではないと思います。