Технически нет ничего плохого в том, как вы его сохраняете. Я смущен, хотя; почему вы удаляете все объекты из shotArray перед сохранением его в gameArray? Кроме того, почему вы храните только один GameArray в пределах gamesArray?
Даже если нет ничего плохого в том, как вы сохраняете это, я предложу лучший способ сделать это. Вы должны создать новый класс, который представляет «игру». Это может сохранить необходимые атрибуты, такие как дата, имя, номер и т. Д., Используя ключи и значения. Если вы переопределите функцию кодера - (void) encodeWithCoder: (NSCoder *) в этом классе, вы можете вызвать:
[coder encodeObject:theData forKey:@"DATE"];
[coder encodeInteger:theNumber forKey:@"NUMBER"];
Затем, когда вы переопределяете - (void) encodeWithCoder: (NSCoder *) encoder, вы можете получить доступ к этому значению, вызывая:
theDate = [[coder decodeObjectForKey:@"DATE"] retain];
theNumber = [coder decodeObjectForKey:@"NUMBER"];
Таким образом, вы можете просто создать массив этих объектов, попросить NSKeyedArchiver заархивировать массив как его корневой объект, и все будет чисто обработано в классе «игры». Если вы когда-нибудь захотите сохранить другие более сложные значения, вы можете создать дополнительные классы и использовать функции encodeObject и decodeObject.
Вы можете посмотреть здесь для получения дополнительной информации:
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html