我正在尝试保存我正在构建的iphone应用的数据。我的数据结构是保存包含单个gameArray的gamesArray。在每场比赛中我都有一个日期,名字,主页/客场以及一个shotArray。 shotArray包含镜头。加载时的镜头创建UIButtons以在屏幕上显示。 shotButtonArray包含这些按钮。当我在plist编辑器中查看我的文件时,我没有看到不同的数组。我只看到1个数组,并且只列出了所有创建的对象。为什么它只显示一个数组。以下是我保存数据的方法
for (UIButton *button in shotButtonArray) {
assert([button isKindOfClass:[UIButton class]]);
[button removeFromSuperview];
}
for (Shot *shot in shotArray) {
[shot subtract_miss_And_make];
}
[self reDrawShots];
[shotButtonArray removeAllObjects];
[shotArray removeAllObjects];
[gameArray removeAllObjects];
[gameArray addObject:theDate];
[gameArray addObject:theName];
NSNumber *theNumber = [NSNumber numberWithInt:homeAway];
[gameArray addObject:theNumber];
[gameArray addObject:shotArray];
gameNumber = 0;
[gamesArray addObject:gameArray];
NSString *path = [self findGamesPath];
[NSKeyedArchiver archiveRootObject:gamesArray toFile:path];
我是否错误地保存了数据。为什么它只显示一个数组。
答案 0 :(得分:1)
保存它的方式在技术上没有任何问题。我很困惑;为什么要在将其保存到gameArray之前从shotArray中删除所有对象?另外,为什么你只在gamesArray中存储一个gameArray?
即使你保存这个方法没有任何问题,我会建议一个更好的方法来做到这一点。你应该创建一个代表“游戏”的新类。这可以使用键和值保存所需的属性,如日期,名称,数字等。如果你覆盖该类中的 - (void)encodeWithCoder:(NSCoder *)编码器函数,你可以调用:
[coder encodeObject:theData forKey:@"DATE"];
[coder encodeInteger:theNumber forKey:@"NUMBER"];
然后,当你覆盖 - (void)encodeWithCoder:(NSCoder *)编码器时,你可以访问该值进行调用:
theDate = [[coder decodeObjectForKey:@"DATE"] retain];
theNumber = [coder decodeObjectForKey:@"NUMBER"];
这样,您只需创建这些对象的数组,请NSKeyedArchiver将数组存档为其根对象,并在“游戏”类中对所有内容进行干净处理。如果您想存储其他更复杂的值,可以创建其他类并使用encodeObject和decodeObject函数。