我可以在plist中有2个数组吗?

时间:2011-04-23 03:22:47

标签: iphone xcode nsmutablearray plist saving-data

我正在尝试保存我正在构建的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];

我是否错误地保存了数据。为什么它只显示一个数组。

1 个答案:

答案 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函数。

您可以在此处查看更多信息: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html