2011-12-29 13 views
7

Sembra che si stiano riscontrando problemi nella memorizzazione di CGRect in un NSDictionary. Il codice che sto usando:NSDictionary non memorizza correttamente CGRect?

dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Crocodile", [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], nil]; 

Da quello che ho letto, che dovrebbe avvolgere la mia CGRect sopra un NSValue e conservarlo nel dizionario.

Tuttavia, quando ho provato a NSLog esso, il valore ritorna come {{0,0}, {0,0}}

NSLog(@"Crocodile value is: %@", NSStringFromCGRect([[dictionary objectForKey:@"Crocodile"] CGRectValue])); 

Ho controllato il mio conteggio dizionario e gli oggetti sembrano essere inserito . Non sono sicuro di dove questo stia fallendo. Ho anche provato a scomporlo manualmente creando una variabile CGRect, quindi una variabile NSValue e inserendola nel dizionario con gli stessi risultati.

Qualsiasi aiuto apprezzato. Grazie

Grazie.

risposta

19

L'ordine degli argomenti deve essere (oggetto, chiave, oggetto, chiave, ...), quindi nel codice l'oggetto è @"Crocodile" e la chiave è il rettangolo.

scambiarlo e dovrebbe funzionare:

dictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], // object first… 
    @"Crocodile", // …then key 
    nil]; 

Nota che le chiavi non sono tenuti ad essere casi di NSString, che può essere qualsiasi istanza di una classe conforme a NSCopying.

+0

Wow, hai ragione. Stavo seguendo questi esempi: http://cocoadevcentral.com/articles/000010.php – user339946

+0

@ user339946 Vorrei contattare l'autore di quell'articolo e dirgli che il codice è sbagliato. –

+0

Ah, per essere onesti, l'articolo è stato pubblicato nel 2001.:/ – user339946

10

È possibile memorizzare come NSString -

 NSStringFromCGRect(<#CGRect rect#>) 

E poi recuperare con

  CGRectFromString(<#NSString *string#>) 

Good Luck

+0

grazie per questo, è molto utile e facile con questo! – PetrV

+0

+1 È stato utile per la raccolta di dati di animazione in un NSDictionary. – iwasrobbed

+0

Grazie amico, è un modo più chiaro – Resty