1

いくつかのロジックをモデル化するために、NSManagedObjectContext を 1 つの NSManagedObject モデルに入れる予定です。これにより、1 つのモデルで多くの一般的なロジックを処理できます。

@interface Collect : NSManagedObject{
        NSManagedObjectContext *managedObjectContext;
    }

    @property (nonatomic, retain) NSNumber *created_at;
    @property (nonatomic, retain) NSString *name;

    - (void) initContext;
@end

@implementation Collect

    @dynamic created_at;
    @dynamic name;

    - (void) initContext{
        if (managedObjectContext == nil)
        {
           managedObjectContext = [MyAppDelegate managedObjectContext];
        }

    }
@end

そして、私はそれを次のように使用します:

Collect *collect = [[Collect new] autorelease];
[collect initContext];

しかし、実行すると次のように表示されますCoreData: error: Failed to call designated initializer on NSManagedObject class 'Collect'

知りたい NSManagedObjectContext インスタンスを NSManagedObject モデルに正しく追加する方法は?

4

1 に答える 1

3

管理対象オブジェクトコンテキストを管理対象オブジェクトに追加することはできません。逆の方法で機能します。最初に管理対象オブジェクトコンテキストが必要であり、次にこのコンテキストでオブジェクトを作成できます。

たとえば、NSManagedObjectContextドキュメントを参照してください。

のインスタンスはNSManagedObjectContext、アプリケーション内の単一の「オブジェクトスペース」またはスクラッチパッドを表します。その主な責任は、管理対象オブジェクトのコレクションを管理することです。これらのオブジェクトは、1つ以上の永続ストアの内部的に一貫したビューを表す関連モデルオブジェクトのグループを形成します。単一の管理対象オブジェクトインスタンスは1つのコンテキストにのみ存在しますが、オブジェクトの複数のコピーが異なるコンテキストに存在する可能性があります。

およびNSManagedObjectドキュメント:

管理対象オブジェクトを直接インスタンス化する場合は、指定された初期化子 ( )を呼び出す必要initWithEntity:insertIntoManagedObjectContext:があります。

insertNewObjectForEntityForName:inManagedObjectContext:新しいオブジェクトを作成するためのユーティリティメソッドもあります。例えば:

Collect *collect = [NSEntityDescription insertNewObjectForEntityForName:@"Collect"
                    inManagedObjectContext:[MyAppDelegate managedObjectContext]];

(必要に応じて、それをのクラスメソッドに入れることができCollectます。)

また、オブジェクトのコンテキストを取得するためのメソッドがNSManagedObjectすでにあることに注意してください。managedObjectContext

NSManagedObjectContect *context = [collect managedObjectContext];

managedObjectContextしたがって、管理対象オブジェクトクラスにインスタンス変数を追加する場合は必要ありません(または問題が発生する可能性もあります) 。

于 2013-02-05T10:54:46.720 に答える