Pagine

2012-08-19

Oggetti Booleani

Questa potrebbe sembrare molto semplice, ma poi finisce sempre che non me la ricordo mai!
Supponiamo di dover costruire un nuovo NSDictionary, tramite uno dei due metodi della classe
dictionaryWithObjectsAndKeys
dictionaryWithObjects:forKeys:
dove nel primo si fornisce una serie di coppie oggetto-chiave, mentre nel secondo si forniscono due NSArray, il primo con gli oggetti ed il secondo con le corrispondenti chiavi.
Ho detto "oggetti": infatti, se dobbiamo creare un elemento Booleano, non dobbiamo farci prendere dalla tentazione di inserire la coppia
YES, @"miaChiave"
Infatti, mentre @"miaChiave" è un oggetto, altrettanto non possiamo dire per YES! Per come sono definiti nel C, i Booleani sono interi, non oggetti!
La scrittura corretta della coppia è
[NSNumber numberWithBool:YES], @"miaChiave"
In questo modo, entrambi sono oggetti e la definizione è salva.
Come mai mi capita di dimenticarla? Perché il compilatore non esce con un errore nel caso sbagliato! Al massimo un warning. Anzi, compila perfettamente e lancia l'applicazione senza dire nulla! Salvo poi dare errori strambi, difficili da comprendere, se non dopo aver capito di cosa si tratta.
Nell'ultimo caso, per esempio, funzionava tutto, i valori venivano usati (erano property legati a dei checkbox), ma ad certo momento, completamente slegato dal loro utilizzo, il software andava in crash, senza nessun messaggio di errore! Tempo di debugging: quasi una giornata!
Quindi, occhio agli oggetti!