【问题标题】:Persistant data of class data type类数据类型的持久化数据
【发布时间】:2011-03-17 00:15:30
【问题描述】:

我有一个类实例,它基本上是来自我自己的另一个类的可变对象数组。我需要将其存储在持久数据中,但我遇到了问题,我尝试使用方法进行归档

-(void)archiveFavorites {
    Singleton *singleton = [Singleton sharedSingleton];
    NSLog(@"archiving");
    GameDatabase *favoritesToArchive = singleton.favorites;
    [NSKeyedArchiver archiveRootObject:favoritesToArchive toFile:[self archivePath]];
}

-(NSString *)archivePath {
    NSString *docDir = 
    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    return [docDir stringByAppendingPathComponent: @"Favorites.dat"];
}

在我的视图控制器中。然后我打电话给

[viewController archiveFavorites];

在我的应用委托中“应用位置确实进入了后台”

基本上,我正在尝试将我自己的类 (GameDatabase) 的实例存储在存档中。当它归档时,我被抛出异常:

编辑:好的,这就是我现在要在我的两个类中实现的内容: 游戏数据库.m

- (void)encodeWithCoder:(NSCoder *)encoder{
    [encoder encodeObject:games forKey:@"Games"];
}

- (id)initWithCoder:(NSCoder *)decoder{
    if(self = [super init])
    {
        games = [decoder decodeObjectForKey:@"Games"];
    }
    return self;
}

GameRecord.m

- (id)initWithCoder:(NSCoder *)decoder {

    if (self = [super init]) {
        self.name = [decoder decodeObjectForKey:@"Name"];
        self.gameRules = [decoder decodeObjectForKey:@"GameRules"];
        self.players = [decoder decodeIntForKey:@"Players"];
        self.gameType = [decoder decodeIntForKey:@"GameType"];
        self.drinkType = [decoder decodeIntForKey:@"DrinkType"];
    }
    return self;

}

- (void)encodeWithCoder:(NSCoder *)encoder {

    [encoder encodeObject:self.name forKey:@"Name"];
    [encoder encodeObject:self.gameRules forKey:@"GameRules"];
    [encoder encodeInt:self.players forKey:@"Players"];
    [encoder encodeInt:self.gameType forKey:@"GameType"];
    [encoder encodeInt:self.drinkType forKey:@"DrinkType"];

}

【问题讨论】:

    标签: ios iphone cocoa-touch archive persistent


    【解决方案1】:

    您走在正确的道路上,但您需要让您的 GameDatabase 类实现 NSCoding 协议。只需添加两个方法described in the docs

    【讨论】:

    • 我需要将其添加到协议中还是只实现这两个类?
    • 这两种方法是协议。除非你问的是不同的问题?
    • 哇,我所做的只是添加了这两种方法,它似乎有效,但我没有在其中添加任何代码。对吗?
    • 通过“工作”确实不会引发错误,但实际上并没有将任何数据保存到磁盘。那部分由你来实现。听起来您对归档的工作方式仍然有些困惑。阅读我链接的文档,以及有关归档的配套指南。我保证,它会回答你的问题。
    • 好的,我阅读了很多内容和更多示例,但我还有更多问题。谢谢你的帮助顺便说一句。我有两个课程,GameDatbase 和 GameRecord。 GameDatabase 是一个 NSMutable 数组,其中包含 GameRecord。 GameRecords 包含 2 个 NSString 和 3 个 NSInteger 值(枚举值)。基本上我要归档的是 GameDatabase 的一个实例。我是否必须为它们实现 NSCoding 协议?我仍然不断被抛出异常。
    猜你喜欢
    • 2014-03-30
    • 2019-03-09
    • 2011-05-11
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多