我有一个我的类实例,它基本上是来自我自己的另一个类的可变对象数组。我需要将它存储在持久数据中但我遇到了麻烦,我尝试使用方法
进行归档-(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];
在我的应用代理中“app location确实输入了背景”
基本上我正在尝试在归档中存储我自己的类(GameDatabase)的实例。归档时,我被抛出异常:
编辑:好的,这就是我现在要在我的两个课程中实现的内容: 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"];
}