最近の (一見無関係な) 変更が行われるまでは正常に動作していた 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 に関連するものでさえないかもしれませんが、何が起こっているのか少し迷っています。どんな提案でも大歓迎です。