CoreData: проверка на нулевое значение - PullRequest
0 голосов
/ 25 августа 2009

У меня есть сущность CoreData (путевая точка) с внешним ключом для другой сущности (дорожки). Когда внешний ключ установлен, или если он не установлен, оператор if работает нормально:

if ([wp track]) {
  thirdLabel.text = [NSString stringWithFormat:@"Part of Track: %@", [[wp track] title]];
}   

Однако, если дорожка, к которой привязана путевая точка, была удалена, то [wp track] все равно оценивается как true, и программа вылетает, когда я устанавливаю текст метки.

Итак, как мне правильно проверить, что это «удалено» нулевое значение в CoreData?

Ответы [ 2 ]

6 голосов
/ 25 августа 2009

Похоже, у вас проблема с односторонними отношениями. Проблема, которую вы описываете, дана более подробно здесь в разделе «Однонаправленные отношения»

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

В вашем конкретном примере, если ваш объект «track» имеет обратную связь с «путевой точкой», то при удалении объекта «track» базовые данные будут знать, как обновить путевую точку, чтобы избавиться от любых висячих связей. , Подробнее об этом также можно узнать по ссылке выше.

0 голосов
/ 25 августа 2009

Это действительно Objective-C для отправки сообщений на nil. Вам нужно будет изменить предикат if на

if (wp != nil && [wp track]) {
    //...
}

Вы также можете проверить retainCount объекта, который может вернуть 0 или привести к сбою в случае, когда объект был освобожден.

В любом случае, возможно, было бы лучше отослать какое-либо уведомление от того, кто уничтожил wp тем, кто заинтересован в его использовании, или по крайней мере сохранить wp до тех пор, пока вы не закончили с этим в этом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...