2014-01-14 3 views
3

Я исследовал тонны вопросов и документы о CoreData возвращения ошибки вместо фактических значений:вины CoreData - как получить данные

Relationship 'whiskers' fault on managed object (0xb7abab0) 

Это происходит, когда я пытаюсь получить счетчик для числа усы, такие как:

self.numWhiskersLabel.text = [NSString stringWithFormat:@"%d", cat.whiskers.count]; 

Даже если я пытаюсь войти усы, установленные непосредственно я все еще получаю ошибку:

NSLog(@"whiskers: %@", cat.whiskers); 

Я понимаю, что «Основные данные не возвращают полный объект, пока не будет необходимо получить доступ к фактическому значению этого объекта. Каждый из ваших возвращенных объектов будет «ошибкой» до этого момента. «Это здорово, но есть необходимость получить доступ к фактическому значению на данный момент. Мне нужно значение прямо сейчас! Итак, как мне выйти из этого oxymoron? Как можно получить доступ к счету Set, не считающему необходимым значение?

+0

Итак, вы сделали запрос на выбор на Коте? Тогда объект Cat должен быть там и готов для вас получить доступ к усам. Каков тип данных усов? – DogCoffee

+0

Какой тип данных является усами? Набор NSManagedObjects? – SomeGuy

+0

Что он показывает на вашем лейбле? - Ваши вызовы для получения данных должны работать, как вы ожидаете. Проблема кроется в другом месте. – Mundi

ответ

0

Это ошибка. Что-то не так с этим экземпляром NSManagedObject. Либо он был удален до того, как вы к нему обращались, либо пытаетесь прикоснуться к нему от неправильного потока.

измените свой вопрос и показать код, который обращается, что NSManagedObject.

Также, что происходит, когда в отладчике вы просто делаете po cat? Вы видите полный объект Cat или это также дает ошибку?

+0

В этом случае это было что-то неправильно с экземпляром NSManagedObject. – soleil

1

я не получал обратную связь от моего комментария, так что я просто буду считать усов это набор NSManagedObjects

Набор обыкновение быть загружены сначала, потому что внутренне он приходит из другой таблицы в БД. Когда вы получаете доступ к .whiskers.count, ему все равно не нужно идти и получать данные, потому что все, что вам нужно, - это количество усов в наборе.

Когда вы натянуть ус из набора, то он будет нарушенным, попробуйте сделать

NSLog(@"whiskers: %@", [cat.whiskers.anyObject anyProperty]); 

Это должно дать вам заряженное NSManagedObject.

+0

Нет, чтобы получить счетчик объектов в отношениях, он все равно должен устранить ошибку для связанных объектов. Он не должен запускать ошибки в свойствах этих объектов. И cat.whiskers.count - действительно хороший способ получить количество объектов в отношениях.Правильное использование операторов сбора ключевых значений, NSExpression или подзапроса - все это намного лучшие решения по ряду причин. – quellish

+0

@quellish, это именно то, что я только что сказал - при получении «подсчета» элементов в NSSet он перейдет в базу данных и будет выбирать только идентификаторы объектов усов, никаких других свойств/столбцов – SomeGuy

+0

Нет, ваше утверждение «Когда вы доступ .whiskers.count все равно не нужно идти и получать данные еще "вводит в заблуждение. Он все равно должен получить доступ к постоянному хранилищу, чтобы удовлетворить выражение count. Даже если это не ошибка объектов, которые являются целью отношения, он должен винить * отношение *. И ошибаться в отношениях, где он испытывает проблемы. – quellish

 Смежные вопросы

  • Нет связанных вопросов^_^