私は幻覚を起こしていると思います。Concentration-lkeゲームに永続性を追加しようとしています。ハイスコアを追跡したいと思います。私はこれを今日しばらくの間部分的に機能させました、そして今それはすべてkablooieになりました(私はそれが正しいiOS用語だと思います)。これで、allHighScoresNSMutablearrayが突然CALayerになりました。NSKeyedArchivingを使用しています。allHighScoresにデータが読み込まれる前に、ファイルにブレークポイントがあります。アプリケーションをステップスルーすると、allHighScoresはNSMutableArrayとして存在します。次のステップで、突然CAレイヤーになります。は?
-(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;}
更新:「highscores.archive」ファイルがすでに存在し、保存が再度呼び出されると、プログラムがクラッシュします。私はアプリを起動し、ハイスコアを見ることができます-それらはそこにあり、幸せに取得されますが、コードを保存します:
-(BOOL)saveHighScores {
NSString *path = [self flipScoreArchivePath];
return [NSKeyedArchiver archiveRootObject:allHighScores toFile:path];}
EXC_BAD_ACCESSを引き起こします。パスは正しいので、どういうわけかallHighScoresは正しくありません。