2012-09-16 10 views
5

Ho una variabile chiamata che partecipa al prelievo da un feed JSON. Dopo aver controllato che tipo classe dell'oggetto viene interpretato come NSLog questo:verifica il valore booleano dal Dizionario.

attending var type is: __NSCFBoolean 

Questo viene fatto usando [classe nomevar] per ottenere il tipo di classe della variabile.

così voglio vedere se questo è vero o falso .... quindi scrivo questo codice ..:

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

Tuttavia non posso compilarlo perché mi dà un errore di testo giallo dire questo:

enter image description here

che cosa sto facendo di sbagliato? Come posso risolvere questo problema. Giusto per aggiungere i dati nel feed assomiglia a questo:

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

risposta

18

booleana nelle classi del dizionario e altri contenitori sono incapsulati in NSNumber oggetti (si veda la documentazione NSNumber per ulteriori informazioni)

Per estrarre il valore è necessario inviare il messaggio boolValue all'oggetto trieved dal dizionario e confrontarlo con YES/NO:

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

Per saperne di più sui valori e come essi vengono incapsulati classi di insiemi di I in the Apple documentation here

+0

, signore sono una leggenda! La mia domanda ha una risposta e la mia ricerca è completa. ottieni 100 esperienze. – jimbob

+0

felice di aiutare ;-) – AliSoftware

+0

grande aiuto, grazie. Mi chiedo cosa sia diventato in rapido 1, 2 o 3 ... – eddyce

2

un tipo "BOOL" non è un oggetto C Obiettivo ma invece un tipo C-style.

È memorizzato in un dizionario come "NSNumber" oggetto.

Così che cosa dovete fare, invece di:

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

è qualcosa di simile:

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]; 
    } 
} 
Problemi correlati