我有一个带有NSMutableArray
实现NSCoding
协议的自定义 Cocos2d 对象的类。
@interface PlayerData : NSObject <NSCoding> {
}
@property (readwrite, nonatomic) NSMutableArray *levelsStars; //Where levelsStars is filled with objects conforming to the NSCoding protocol.
对象是 type LevelData
,它继承自CCNode
(一个 Cocos2d 类)并符合NSCoding
协议。
@interface LevelData : CCNode <NSCoding>
下面是协议的实现PlayerData
。为了对NSMutableArray
符合NSCoding
对象的自定义 Cocos2d 对象进行编码和解码:
-(void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:[NSKeyedArchiver archivedDataWithRootObject:levelsStars] forKey:kLevelsStars];
}
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
//Reading arrays:
NSData * dataRepresentingLevelStars = [aDecoder decodeObjectForKey:kLevelsStars];
if (dataRepresentingLevelStars!=nil) {
NSArray * oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingLevelStars];
if (dataRepresentingLevelStars!=nil) {
levelsStars = [NSMutableArray arrayWithArray:oldSavedArray];
}
else
{
levelsStars = [[NSMutableArray array] initWithCapacity:10];
}
}
}
return self;
}
这种方法正确吗?我基于这个问题/答案。
编辑:我想我会在我的用例中添加更多细节
我的用户可以在不同的角色中进行选择,每个角色对应一个 PlayerData 对象,我计划将其存储在不同的文件中,并附加用户的游戏中心 ID(id-character1.archive、id-character2.archive 等)。
我确实保存了对象中字符的进度(例如分数、生命),包括 Cocos2d 对象的 NSMutableArray 自定义数组(在我的真实案例中,我确实有 5 个不同的数组,每个数组包含 20/30 个对象)。