У меня есть некоторые функциональные возможности 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 возвращает значение nil:.
Между двумячитает setValue: не вызывается, и сам объект Foo все еще действителен (не ноль).На самом деле никакие другие операции с базовыми данными не выполняются между двумя операциями чтения любого объекта базовых данных или контекста в целом.
Мы используем ARC в нашем проекте.Возможно ли, что ARC каким-то образом связывается с моими переменными Core Data и освобождает их?Если да, есть ли у кого-нибудь предложения по отладке освобождения ARC?Или, что еще лучше, кто-нибудь знает, как ARC не освобождает мою переменную.
Возможно, это даже не связано с ARC, однако я немного растерялся относительно того, что происходит.Будем очень благодарны за любые предложения.