Атрибут Core Data изменился на nil (связано с ARC?)

У меня есть некоторые функции Core Data, которые работали нормально до тех пор, пока не были внесены некоторые недавние (казалось бы, не связанные) изменения. Теперь у меня возникают проблемы, когда все атрибуты, принадлежащие конкретному экземпляру подкласса NSManagedObject, внезапно возвращают nil.

Допустим, мой подкласс NSManagedObject называется Foo, и у него есть только один атрибут с именем value. Как только я понял, что значение каким-то образом становится равным нулю, я пошел и установил следующую категорию для отслеживания изменений в значении.

@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: вызывается для моего объекта, а переданный аргумент не равен нулю NSDate. Затем значение извлекается (другим методом). То же значение, которое было указано, извлекается правильно.

Однако, когда другой метод пытается прочитать значение, вызывается метод доступа к значению, и primitiveValueForKey: возвращает нулевое значение.

Между двумя считываниями setValue: не вызывается и сам объект Foo по-прежнему действителен (не равен нулю). Фактически никакие другие операции Core Data не выполняются между двумя чтениями любого объекта Core Data или контекста в целом.

Мы используем ARC в нашем проекте. Возможно ли, что ARC каким-то образом вмешивается в мои переменные Core Data и освобождает их? Если да, есть ли у кого-нибудь предложения по отладке освобождений ARC? Или еще лучше, знает ли кто-нибудь способ гарантировать, что ARC не освобождает мою переменную.

Это может даже не иметь отношения к ARC, однако я немного не понимаю, что происходит. Будем очень признательны за любые предложения.

8
задан Kazuki Sakamoto 26 August 2011 в 03:41
поделиться