Perché il seguente risultato in un errore BAD_ACCESS?Can NSDictionary può contenere diversi tipi di oggetti come valori?
Si possono avere diversi tipi di oggetti come valori in NSDictionary, incluso un altro NSDictionary?
Perché il seguente risultato in un errore BAD_ACCESS?Can NSDictionary può contenere diversi tipi di oggetti come valori?
Si possono avere diversi tipi di oggetti come valori in NSDictionary, incluso un altro NSDictionary?
si può inserire qualsiasi tipo di oggetto in un NSDictionary
. Quindi, mentre @"fred"
è OK, 1
non è, come un intero non è un oggetto. Se si desidera inserire un numero in un dizionario, avvolgerlo in un NSNumber
:
NSDictionary *header = { @"title": @"fred", @"count": @1 };
Non come l'avete. Il numero 1 è una primitiva e l'oggetto NSArray può contenere solo oggetti. Crea un NSNumber per "1" e poi lo memorizzerà.
Un NSDictionary
può contenere solo oggetti Objective-C in esso (come NSString
e NSArray
), non può contenere tipi primitivi come int
, float
o char*
. Dati quei limiti, i dizionari eterogenei sono perfettamente legali.
Se si desidera includere un numero come 1
come una chiave o un valore, si dovrebbe avvolgere con una NSNumber
:
NSDictionary *header=[[NSDictionary alloc] initWithObjectsAndKeys:
@"fred", @"title",
[NSNumber numberWithInt:1], @"count",
nil];
L'unico requisito è che è essere un oggetto. Sta a te gestire gli oggetti correttamente nel tuo codice, ma presumibilmente, puoi tenere traccia dei loro tipi in base ai tasti.
1 non è un oggetto. Se vuoi inserire un numero in un dizionario, puoi convertirlo in un NSNumber.
Interessante. Sono abituato al C# in cui tutto è un oggetto. Grazie. – ChrisP