2012-09-16 15 views
5

Mam zmienną o nazwie attending ciągnięty z kanału JSON. Po sprawdzeniu, jaki rodzaj klasy obiekt jest interpretowany jak NSLog to:sprawdzanie wartości boolowskiej ze słownika.

attending var type is: __NSCFBoolean 

Odbywa się to za pomocą [klasę varname], aby uzyskać typ klasy zmiennej.

Więc chcę zobaczyć, czy to prawda czy fałsz .... więc piszę ten kod ..:

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

Jednak nie mogę go skompilować, ponieważ daje mi żółtą błąd tekstowy mówiąc to:

enter image description here

Co robię źle? Jak mogę to naprawić. Wystarczy dodać dane w paszy wygląda następująco:

{ 
    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"; 
}, 

Odpowiedz

18

Boolean w klasach słownikowych i innych pojemników są obudowane w NSNumber obiektów (patrz dokumentacja NSNumber dla Więcej informacji)

Aby wyodrębnić wartość, należy wysłać wiadomość o numerze boolValue do obiektu trieved ze słownika i porównać go do tak/nie:

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

Więcej o wartościach i jak są one zamknięte w kapsułkach klas zbiorze in the Apple documentation here

+0

panu to legenda! Moje pytanie zostało odebrane, a moje zadanie jest kompletne. zyskujesz 100 punktów doświadczenia. – jimbob

+0

miło pomóc ;-) – AliSoftware

+0

świetna pomoc, dzięki. Zastanawiam się, co stało się w szybkim 1, 2 lub 3 ... – eddyce

2

A „BOOL” typ nie jest celem, lecz obiekt C typ C-style.

Jest przechowywany w słowniku jako obiekt "NSNumber".

Więc co trzeba zrobić, zamiast:

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

jest coś takiego:

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]; 
    } 
} 
Powiązane problemy