2010-11-18 19 views
3

Temel verilerimde bir BOOL var. Değer YES veya NO olarak ayarlanmadıkça değerin boş olmasını istiyorum. Bunu yapmak mümkün mü? Kodumda, değerin henüz ayarlanmamış olup olmadığını nasıl kontrol edebilirim?iPhone - Temel Veriler Bool Değerleri?

nsmanagedObject öğesinde benim BOOL için NSNumber kullanıyorum, çekirdek verilerimde mdoel i BOOL var.

cevap

5

CoreData, varsayılan değerleri ayarlamanızı sağlar. A Bir Boole "EVET", "HAYIR", "Yok" içerebilir. Varsayılan değeri "Hiçbiri" olarak ayarlamak, tam olarak ihtiyacım olan "null" değerini döndürür.

+0

Bu benim de düşündüğüm şey. Benim durumumda bir hasChildren özniteliğine sahip bir düğümüm var. Öyle ise, bu düğümün çocuk sahibi olup olmadığını kontrol etmek için sunucuyu sorgulamanız gerektiği anlamına gelir, Evet ve Hayır, çocuk sahibi olup olmadığını kesinlikle bildiğim anlamına gelir. – Sushant

3

Boolean'ı modelinizde öznitelik türü olarak ayarlarsanız, bu, NSNumber kullanılarak uygulanacağı anlamına gelir.

Neden NO yerine hiçbir değer döndürmek istemediğinden emin değilim, aslında önermemenizi öneririm. Yanlış bir varsayılan değer ayarladıysanız veri bütünlüğü ile çok daha kolay bir zamana sahip olacaksınız.

Ancak, kesinlikle ısrar ederseniz, özniteliğin nil olup olmadığını kontrol edebilir veya henüz bir değer atanmış olup olmadığını kontrol edemezsiniz.

+4

Birçok kullanım durumunda NO ile "ayarlanmadı" arasında bir fark var. –

+1

Fark olduğunu anlıyorum. Daha önce orada bulundum ve bütünlük problemlerini tanıtmak zorunda. Sanırım, -1, 0 veya 1 olan bir tamsayı kullanmak gibi daha iyi yollar olduğunu düşünüyorum. –

+1

Katılıyorum. -1, 0 ve 1 daha iyi bir çözümdür – griotspeak

0

Doğru cevap evet, ve 'evet' 'hayır' ve farklı 'yok' kullanmak için gerçek bir anlamı vardır, bu da verilerin sağlam olduğu anlamına gelir. Çekirdek Verilerde, özellikle bir veritabanında hata ayıklamak istiyorsanız, bazen 'hiçbiri' seçeneğinin kontrol edilmesinin iyi bir nedeni vardır.

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

ve Çekirdek veri arkasında SQL veritabanını kontrol eğer varsayılan ayarları kullanırsanız 'NULL' göreceksiniz: Çekirdek Veri size kullanabilirsiniz.

İlgili konular