Я думаю, что я галлюцинирую. Я пытаюсь добавить некоторую настойчивость в свою игру Concentration-lke. Я хотел бы отслеживать высокие баллы. Некоторое время назад я частично работал над этим, и теперь все прошло с kablooie (я думаю, что это правильная терминология iOS). Теперь мой allHighScores NSMutablearray внезапно становится CALayer. Я использую архивирование NSKeyed. У меня есть точка останова в моем файле до того, как allHighScores загрузится с данными. При переходе через приложение allHighScores существует как NSMutableArray, а затем на следующем этапе он становится CA-слоем. А?Мой NSMutableArray внезапно становится CALayer
-(id)init
{
self = [super init];
if (self) {
NSString *path = [self flipScoreArchivePath];
NSLog(@"Path is %@", path);
allHighScores = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
if (!allHighScores) {
allHighScores = [[NSMutableArray alloc] init];
}
}
return self;
}
+(FlipHighScoreStore *)sharedStore {
static FlipHighScoreStore *sharedStore = nil;
if (!sharedStore) {
sharedStore = [[super allocWithZone:nil]init];
}
return sharedStore;
}
Каким-то образом, вызывая NSKeyedUnarchiver меняет мои allHighScores из NSMutableArray в CALayer. Я очень смущен.
Я попытался добавить сохранение в инструкцию, но это не помогло.
Вот мой код кодирования/декодирования:
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.themeChosen forKey:@"themeChosen"];
[aCoder encodeInt:self.highScore forKey:@"highScore"];
[aCoder encodeInt:self.scoreStartLevel forKey:@"scoreStartLevel"];
[aCoder encodeInt:self.scoreFinishLevel forKey:@"scoreFinishLevel"];
[aCoder encodeObject:scoreDateCreated forKey:@"scoreDateCreated"];}
-(id)initWithCoder:(NSCoder *)aDecoder {
if (self) {
self.themeChosen = [aDecoder decodeObjectForKey:@"themeChosen"];
self.highScore = [aDecoder decodeIntForKey:@"highScore"];
self.scoreStartLevel = [aDecoder decodeIntForKey:@"scoreStartLevel"];
self.scoreFinishLevel = [aDecoder decodeIntForKey:@"scoreFinishLevel"];
scoreDateCreated = [aDecoder decodeObjectForKey:@"scoreDateCreated"];
}
return self;}
UPDATE: Программа падает, когда «highscores.archive» файл уже существует и называется сохранить снова. Я могу запустить приложение, обратите внимание на высокие оценки - они там и извлекаться счастливо, но сохранить код:
-(BOOL)saveHighScores {
NSString *path = [self flipScoreArchivePath];
return [NSKeyedArchiver archiveRootObject:allHighScores toFile:path];}
вызывает EXC_BAD_ACCESS. Путь прав, так что все-таки allHighScores нет.
Вы используете ARC? – joerick
Можете ли вы показать нам, как вы реализуете протокол NSCoding в 'FlipHighScore', или как бы то ни было имя класса? – mbm29414
Попробуйте это 'NSLog (@" unarchived class% @ ", NSStringFromClass ([allHighScores class])); и обратите внимание на результат. – CodaFi