2013-08-14 3 views
0

Я создаю класс, который будет хранить статистику для моей игры. Я хотел бы сохранить каждый раунд в изменчивый массив, который можно сохранить и записать в файл.Как я могу кодировать и декодировать массив чисел в Objective-C?

Я использую протокол NSCoding и реализую методы encodeWithCoder и initWithCoder.

#define masteredComponentsKey @"masteredComponents" 
#define scoresKey @"scores" 
-(void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:_masteredComponents forKey:masteredComponentsKey]; 
    [encoder encodeObject:_scores forKey:scoresKey]; 

} 

-(id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super init]; 
    if (self) 
    { 
     _masteredComponents = [decoder decodeObjectForKey:masteredComponentsKey]; 
     _scores = [decoder decodeObjectForKey:scoresKey]; 
    } 
    return self; 
} 

Поскольку массивы являются указателями на объекты в Objective-C, я полагаю, мои оценки должны быть Объектно-Обернуты целым числом, такими как NSNumber или NSValue. Однако эти объекты не реализуют протокол NSCoding.

Итак, какой лучший способ сохранить кучу чисел с помощью NSCoding?

---- Это мой первый пост StackOverflow поэтому, пожалуйста, простите какое-либо необычные приличие ----

+0

Я бы рекомендовал '' методы NSArray' WriteToFile: атомарно: 'и' arrayWithContentsOfFile: 'методы для записи массива в файл/чтение массива из файла. – MaxGabriel

+0

Это хорошая мысль, и я подумал об использовании writeToFile: атомарно. Проблема в том, что я хотел бы гибко сохранять и восстанавливать примитивные типы данных, такие как int, BOOL, double. – altyus

ответ

3

NSValue и NSNumber реализовать NSCoding протокол, так что вы можете использовать их ..

NSValue реализует NSSecureCoding, который унаследован от NSCoding, посмотрите на Reference

Итак, вы можете использовать их:

[encoder encodeObject:@(_scores) forKey:scoresKey]; 
... 
_scores = [[decoder decodeObjectForKey:scoresKey] intValue]; 
+0

ах да, который сидел прямо там, в документации. Единственное, что я укажу всем, кто использует ваш образец кода, encodeObject можно просто назвать _scores. Спасибо за информацию! – altyus

 Смежные вопросы

  • Нет связанных вопросов^_^