2014-05-18 13 views
7

Ho un oggetto che ha una proprietà che potrebbe essere nulla. Come dovrei implementarlo in encodeWithCoder (e decodificareWithCoder)?iOS - EncodeWithCoder - Encode Nil

- (void)encodeWithCoder:(NSCoder *)aCoder 
{ 
    [aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil 
} 

risposta

7
- (void)encodeWithCoder:(NSCoder *)aCoder 
{ 
    if (_duration) { 
     [aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil 
    } 
} 

(Il vostro oggetto sarà nil sulla decodifica se la chiave non è presente.)

10

soluzione di Aaron è pulita e chiaramente comunica quello che sta succedendo. Non sono riuscito a trovare alcuna informazione, tuttavia, se è OK passare il nil a encodeObject:forKey:, così l'ho provato. Si scopre che puoi tranquillamente farlo (correggimi se mi manca qualcosa).

Così si può semplicemente dire

- (void)encodeWithCoder:(NSCoder *)aCoder 
{ 
    [aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil 
} 

Anche quando _duration è pari a zero, questo funzionerà. In tal caso, semplicemente non scriverà la chiave per il programmatore.

+0

Si noti che questo * sovrascriverà * il vecchio valore di '_duration' con' nil', che potrebbe non essere desiderabile. Cioè, potresti voler codificare il valore solo se è presente per preservare un valore precedente. –