我想保存我的遊戲數據。我開始本教程由雷:How to Save your Game’s Data: Part 1/2encodeData writeToFile EXC_BAD_ACCESS
一切工作正常,除了-(void)save;
-(void)save
{
NSData* encodedData = [NSKeyedArchiver archivedDataWithRootObject: self];
[encodedData writeToFile:[RWGameData filePath] atomically:YES];
}
當我把這種方法我得到這樣的;
-[__NSCFArray getFileSystemRepresentation:maxLength:]: unrecognized selector sent to instance 0x1663dcc0
2014-07-14 18:42:15.029 App[3629:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray getFileSystemRepresentation:maxLength:]: unrecognized selector sent to instance 0x1663dcc0'
或者這樣: EXC_BAD_ACCESS代碼= 1個地址=位於0xC或EXC_BAD_ACCESS代碼= 1個地址=該線路上0x7000000c或EXC_BAD_ACCESS代碼= 1個地址= 0x1000000c :
[encodedData writeToFile:[RWGameData filePath] atomically:YES];
我該如何解決這個問題?來自教程的源代碼正常工作。但在我的比賽中,它墜毀了。
UPDATE:
在雷的源代碼目標C ARC:YES。但後來我用ARC,它給了我很多錯誤。
編輯:我改變了一些代碼,並轉到教程的第二部分。保存/加載工作正常第一次運行,但第二次運行它只能正確加載一次,當我嘗試更改分數值時,我有exc_bad_access。在此行中我gamelayer更新比分
+(instancetype)loadInstance
{
pathString = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"gamedata"];
NSData* decodedData = [NSData dataWithContentsOfFile: pathString];
if (decodedData) {
//1
NSString* checksumOfSavedFile = [KeychainWrapper computeSHA256DigestForData: decodedData];
//2
NSString* checksumInKeychain = [KeychainWrapper keychainStringFromMatchingIdentifier: SSGameDataChecksumKey];
//3
if ([checksumOfSavedFile isEqualToString: checksumInKeychain]) {
RWGameData* gameData = [NSKeyedUnarchiver unarchiveObjectWithData:decodedData];
return gameData;
}
//4
}
return [[RWGameData alloc] init];
}
-(void)save
{
pathString = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"gamedata"];
NSData* encodedData = [NSKeyedArchiver archivedDataWithRootObject: self];
[encodedData writeToFile:pathString atomically:YES];
NSString* checksum = [KeychainWrapper computeSHA256DigestForData: encodedData];
if ([KeychainWrapper keychainStringFromMatchingIdentifier: SSGameDataChecksumKey]) {
[KeychainWrapper updateKeychainValue:checksum forIdentifier:SSGameDataChecksumKey];
} else {
[KeychainWrapper createKeychainValue:checksum forIdentifier:SSGameDataChecksumKey];
}
if([NSUbiquitousKeyValueStore defaultStore]) {
[self updateiCloud];
}
}
EXC_BAD_ACCSES:
[RWGameData sharedGameData].score += 1;
但是,如果我從調用init方法這一行 - 它的工作。
你說得對。來自'-writeToFile'的[RWGameData filePath]返回一些隨機的東西,比如圖片名稱,CCFrameSprites,數組或者其他。我怎樣才能解決這個問題? – flowmachine1
您應該在問題中發佈該方法。它與您發佈的教程鏈接中提供的實施有多接近? –
它是一樣的。 – flowmachine1