我跟随Ray Wenderlich的教程,使用单例和NSCoding(http://www.raywenderlich.com/63235/how-to-save-your-game-data-tutorial-part-1-of-2)来保存游戏数据。他们所做的一切我已经能够用于NSStrings(改变价值,存储,在我的项目中使用)。我尝试创建一个NSMutableArray,所以我可以添加并保存一个字符串列表,但它没有用。可能有一个非常简单的解决方案,所以提前感谢你忍受一个新手。
我的代码:
RWGameData.h中的(我使用游戏数据的单身人士):
@property (nonatomic, strong) NSMutableArray *dataArray;
,@implementation
之后:
static NSString* const GameDataArrayofValues = @"dataArray";
-(void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.dataArray forKey:GameDataArrayofValues];
}
-(instancetype)initWithCoder:(NSCoder *)decoder {
self = [self init];
if (self) {
_dataArray = [[decoder decodeObjectForKey:GameDataArrayofValues] mutableCopy];
}
return self;
}
(还有该教程中的所有其他代码,如保存方法等。)
在myGame.m中
[[RWGameData sharedGameData].dataArray addObject:@"objectString"];
[[RWGameData sharedGameData] save];
在此之后记录数组的内容显示为空。 [RWGameData sharedGameData].dataArray
接受addObject
调用,因为我将其创建为NSMutableArray,但似乎它实际上并未实现。
有什么想法吗?
答案 0 :(得分:0)
我猜是_dataArray是零。
您应该向initWithCoder添加代码,以检查它是否能够读取数组数据。如果没有,_dataArray将为零。在这种情况下,您应该初始化一个空的可变数组。
您更新的initWithCoder可能如下所示:
-(instancetype)initWithCoder:(NSCoder *)decoder {
self = [self init];
if (self)
{
_dataArray = [[decoder decodeObjectForKey:GameDataArrayofValues] mutableCopy];
if (_dataArray)
_dataArray = [[NSMutableArray alloc] init];
}
return self;
}
同样,您需要实现一个“常规”init方法,将_dataArray设置为空的可变数组。