CoreData prefetch не ошибается в свойствах - PullRequest
0 голосов
/ 03 декабря 2011

У меня проблема с тем, что CoreData не может выполнить ошибку на объекте. Я предполагаю, что это потому, что объект был удален, и теперь CoreData пытается получить доступ к свойству в некотором контексте и не может вызвать его ошибку. Чтобы решить эту проблему, я попытался вызвать setRelationshipKeyPathsForPrefetching и передать ему отношения, которые я хочу предварительно выбрать .

Например, у меня есть объект A, и он имеет отношение «многие» к объекту B, но в какой-то момент, когда я обращаюсь к свойствам объекта B, объект B удаляется в другом контексте, и теперь ошибка может не будет выполнено.

[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"listOfBs", nil]];

Я подумал, что если бы я это сделал, он бы предварительно выбрал объект B, чтобы я мог безопасно вызывать его свойства, но, похоже, это не так.

РЕДАКТИРОВАТЬ: Я не могу найти информацию об этом, но это должно быть довольно распространенная проблема. Если в каком-то контексте есть управляемый объект, который удален в другом контексте, у него должен быть какой-то способ безопасно определить, что объект больше не существует, а не просто сбой

РЕДАКТИРОВАТЬ 2: Я не думаю, что CoreData правильно подтверждает мой запрос на предварительную выборку. Если я вызываю setRelationshipKeyPathsForPrefetching, то возвращаемые объекты должны быть повреждены, но даже в том случае, когда у меня нет ошибки, я могу просто распечатать возвращаемый объект и увидеть, что он неисправен. Разве CoreData не выполняет предварительную выборку объектов во многих отношениях?

РЕДАКТИРОВАТЬ 3: Хорошо, возможно, сами отношения предварительно выбраны, но свойства предварительно выбранных элементов не нарушены. Поэтому, если у меня есть объект A, и я хочу предварительно выбрать все B, связанные с A, я использую setRelationshipKeyPathsForPrefetching, но все свойства B не нарушены.

1 Ответ

0 голосов
/ 10 декабря 2011

разобрался с решением. Базовые данные не допускают атомарных выборок из базы данных, поэтому если что-то после предварительной выборки отношений, Core Data выдаст ошибку Предварительная выборка отношений делает именно это, предварительная выборка отношений. Но не данные. Решением было использование try / catch и обновление объекта при исключении.

...