2010-11-18 3 views
3

У меня есть BOOL в моих основных данных. Я хочу, чтобы значение было равно null, если я не установил его ни YES, ни NO. Можно ли это сделать? в моем коде, как я могу проверить, не установлено ли значение еще или нет?iPhone - Основные данные Bool Ценности?

В моем nsmanagedObject я использую NSNumber для моего BOOL, в моих основных данных mdoel у меня есть BOOL.

ответ

5

CoreData позволяет устанавливать значения по умолчанию. Bool может содержать «YES», «NO», «None». Установка значения по умолчанию на «None» делает возвращаемое значение «null», что именно то, что мне нужно.

+0

Это то, о чем я тоже думал. В моем случае у меня есть узел с атрибутом hasChildren. Если это «Нет», это означает, что мне нужно запросить сервер, чтобы проверить, есть ли у этого узла дети, «Да» и «Нет» означает, что я определенно знаю, есть ли у него или нет детей. – Sushant

3

Если вы устанавливаете Boolean как тип атрибута в своей модели, это означает, что он будет реализован с использованием NSNumber.

Я не уверен, почему вы не хотите возвращать значение вместо NO, я бы на самом деле не рекомендовал вас. У вас будет гораздо более легкое время с целостностью данных, если вы просто установите значение false по умолчанию.

Однако, если вы абсолютно настаиваете, вы можете просто проверить, является ли атрибут nil или нет, чтобы узнать, было ли ему еще присвоено значение.

+4

Существует разница между NO и «не установлена» во многих случаях использования. –

+1

Я понимаю, что есть разница. Я был там раньше, и он обязан внедрять проблемы целостности. Я думаю, что есть лучшие способы, такие как использование целого числа, которое равно -1, 0 или 1. –

+1

Я согласен. -1, 0 и 1 являются лучшим решением – griotspeak

0

Правильный ответ: да, и есть реальный смысл использовать «да» и «нет», а это значит, что данные не повреждены. В Core Data есть некоторая причина иногда проверять «нет», особенно если вы хотите отлаживать базу данных. В основных данных вы можете использовать:

[myManagedObject setValue: nil forKey:@"attributeOfMyManagedObject"]; 

и если проверить вашу базу данных SQL позади Core Data, вы увидите «NULL», если вы используете настройки по умолчанию.

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