Постоянные данные типа данных класса - PullRequest
1 голос
/ 17 марта 2011

У меня есть экземпляр класса, который в основном является изменяемым массивом объектов из другого моего собственного класса. Мне нужно сохранить это в постоянных данных, но у меня возникли проблемы, я попытался архивировать с помощью методов

-(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) в архиве. Когда он архивирует, я выбрасываю исключение:

РЕДАКТИРОВАТЬ: Хорошо, вот что я пытаюсь реализовать сейчас в моих двух классах: 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"];

}

1 Ответ

0 голосов
/ 17 марта 2011

Вы на правильном пути, но вам нужно, чтобы ваш класс GameDatabase реализовал протокол NSCoding. Просто добавьте два метода , описанных в документах .

...