2012-09-16 17 views
5

JSON beslemesinden çekilmeye katılma olarak adlandırılan değişkenim var.Sözlük'ten boole değerini denetleme.

attending var type is: __NSCFBoolean 

Bu değişkenin sınıf türünü almak için [Değişkenadı sınıfını] kullanılarak yapılır: Nesne bu NSLog olarak yorumlanır ediliyor ne sınıf tipi kontrol ettikten sonra.

Yani bu yüzden bu kod yazmak .... bu doğru veya yanlış olup olmadığını görmek istiyorum ..:

if([[_events objectAtIndex:indexPath.row] objectForKey:@"attending"] == YES){ 

bu diyerek bana sarı metin hata veriyor çünkü bunu derlemek olamaz Ancak: yanlış yapıyorum

enter image description here

? Bunu nasıl düzeltebilirim? Sadece yemlerde veri eklemek için şuna benzer:

{ 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 504; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 503; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 0; 
    date = "2012-09-24 09:11:00"; 
    id = 508; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 509; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 0; 
    date = "2012-09-24 09:11:00"; 
    id = 505; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 506; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 

cevap

18

Boole sözlük ve diğer konteyner sınıflarında NSNumber nesneler (için NSNumber belgelerine bakın kapsüllenmişlerdir:

if([[_events objectAtIndex:indexPath.row] objectForKey:@"attending"] == YES){ 

böyle bir şeydir daha fazla bilgi için)

Değeri ayıklamak için nesneye boolValue mesajını göndermeniz gerekir sözlükten trieved ve EVET/HAYIR değerini karşılaştırmak:

NSNumber* attendingObject = [[events objectAtIndex:indexPath.row] objectForKey:@"attending"]; 
if ([attendingObject boolValue] == YES) 
{ 
    ... 
} 

Devamı değerleri hakkında ve bunların nasıl kuşatılacağını ben toplama sınıfları in the Apple documentation here

+0

size efendim bir efsane vardır! Soruma cevap verildi ve görevim tamamlandı. 100 deneyim kazanırsınız. – jimbob

+0

yardımcı olmaktan mutluluk duyarız ;-) – AliSoftware

+0

harika yardım, teşekkürler. Bunun 1, 2 veya 3 ... – eddyce

2

bir "BOOL" tipi bir Objective C nesne yerine bir C-tarzı türü değil.

Bir sözlükte bir "NSNumber" nesnesi olarak saklanır.

Yani yerine yapmanız gerekenler:

BOOL attending = NO; // assume NO to start with 
NSDictionary * lessonDictionary = [_events objectAtIndex: indexPath.row]; 
if(lessonDictionary) 
{ 
    NSNumber * attendingObject = [lessonDictionary objectForKey: @"attending"]; 
    if(attendingObject) 
    { 
      attending = [attendingObject boolValue]; 
    } 
}