10

最近の (一見無関係な) 変更が行われるまでは正常に動作していた Core Data 機能がいくつかあります。現在、特定の NSManagedObject サブクラス インスタンスに属するすべての属性が突然 nil を返すという問題が発生しています。

私の NSManagedObject サブクラスが Foo と呼ばれ、value と呼ばれる属性を 1 つだけ持っているとしましょう。価値がどういうわけかゼロになっていることに気づいたら、価値の変化を監視するために次のカテゴリを設定しました。

@implementation Foo (Debug)

- (void)setValue:(NSDate *)value
{
    [self willChangeValueForKey:@"value"];
    [self setPrimitiveValue:value forKey:@"value"];     
    [self didChangeValueForKey:@"value"];
}

- (NSDate *)value
{
    [self willAccessValueForKey:@"value"];
    NSDate *value = [self primitiveValueForKey:@"value"];
    [self didAccessValueForKey:@"value"];

    return value;
}

@end

setValue: がオブジェクトに対して呼び出され、渡された引数が nil 以外の NSDate です。次に、値が (別の方法で) 取得されます。指定された同じ値が正しく取得されます。

ただし、別のメソッドが値を読み取ろうとすると、value アクセサーが呼び出され、primitiveValueForKey: によって nil 値が返されます。

2 つの読み取りの間に setValue: は呼び出されず、Foo オブジェクト自体はまだ有効です (非 nil)。実際、Core Data オブジェクトまたはコンテキスト全体に対する 2 つの読み取りの間に、他の Core Data 操作は実行されません。

プロジェクトでは ARC を使用しています。ARC が Core Data 変数をいじって割り当てを解除している可能性はありますか? もしそうなら、ARCの割り当て解除をデバッグするための提案はありますか? または、さらに良いことに、ARCが変数の割り当てを解除しないようにする方法を知っている人はいますか?

これは ARC に関連するものでさえないかもしれませんが、何が起こっているのか少し迷っています。どんな提案でも大歓迎です。

4

3 に答える 3

15

これはNSManagedObjectContext、これらのオブジェクトが属しているがなくなるためである可能性が非常に高くなります。インスタンスがNSManagedObject存在するが、自分でコンテキストを保持していない場合、それらの管理対象オブジェクトはを返し始めnilます。

ARCでは、コンテキストを変数、つまりグローバルstrongではないインスタンス変数に格納していることを確認してください。weakstatic

非ARC、つまり保持リリースコードでは、コンテキストを保持していることを確認してください。

于 2011-12-28T15:35:11.387 に答える
0

viewDidLoad-Method を確認してください

profile = [NSEntityDescription insertNewObjectForEntityForName:@"MyProfile" inManagedObjectContext:profileContext];

これがうまくいくことを願っています

于 2011-11-01T13:09:00.490 に答える