0

コンテキストを保存するときにこの問題が発生します。断続的です。半分の時間でコンテキストが適切に保存され、残りの半分でオブジェクトのメンバーが null になります (そして、実際にはコンテキストには何も残りません。

「mylist」は、保存しているコンテキストに属する NSManagedObject のリストです。"result" は常に YES なので、エラーはありません。

    // prints out results before save
    for (MyObj* obj in mylist) {
        NSLog(@"%p, %@", obj, [obj message]);
    }

    //context save here
    NSError *error;
    BOOL result = [[[Core appDelegate] managedObjectContext] save:&error];
    if (!result) {
        NSLog(@"Save Failed!");
        NSLog(@"report: %@, %@, %@", error, [error userInfo],[error localizedDescription]);
    } else {
        NSLog(@"Save succeeded");
    }

    // prints out results after save
    for (MyObj* obj in mylist) {
        NSLog(@"%p, %@", obj, [obj message]);
    }

コンソールには次のようなものが表示されます。

    0x9af6990, message0
    0x9af8910, message1
    0x9afa390, message2
    0x9afa5a0, message3
    Save succeeded
    0x9af6990, (null)
    0x9af8910, (null)
    0x9afa390, (null)
    0x9afa5a0, (null)

また、コンテキストから再取得しようとしましたが、保存後にオブジェクトが 0 になりました。これはすべてメインスレッドで行われています。何か案は?この時点で本当に困惑しています。

4

1 に答える 1

1

おそらく、多数のコード例で示されている Apple の推奨に従い、 のサブクラスの属性を取得および設定するときに通常のパターンを使用する必要がありますNSManagedObject。で宣言@propertiesし、@interfaceで設定/取得を自動化する必要があり@dynamicます。

@interface MyObj : NSManagedObject 
@property (nonatomic, retain) NSString * message;
@end 

@implementation MyObject
@dynamic message;
@end

カスタム アクセサーが必要な場合(NSString *)messageは、実装でオーバーライドするだけです。

于 2012-06-14T22:12:42.253 に答える