gpt4 book ai didi

ios - 类数据类型的持久化数据

转载 作者:行者123 更新时间:2023-11-28 17:46:49 24 4
gpt4 key购买 nike

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

-(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"];
}

在我的 View Controller 中。然后我调用

[viewController archiveFavorites];

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

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

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

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

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

游戏记录.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"];

}

最佳答案

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

关于ios - 类数据类型的持久化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5333360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com