NSUserDefaults的使用,以節省比分將讓你輕鬆遊戲被破解。
可以使用的NSKeyedArchiver將數據保存到一個文件
-(void)saveState {
NSLog(@"Saving state");
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *statePath = [documentsDirectory stringByAppendingPathComponent:someFileName];
NSMutableData *appData;
NSKeyedArchiver *encoder;
appData = [NSMutableData data];
encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:appData];
// SaveData using [encoder encodeObject:(id)object forkey(NSString *)key]
[encoder encodeObject:someUserObject forKey:@"someUserKey"];
[encoder encodeInteger:someUserscore forKey:@"someUserScoreKey"];
// Finish encoding and write the contents of gameData to file
[encoder finishEncoding];
[appData writeToFile:statePath atomically:YES];
}
然後,您可以用文件加載數據傳回,像這樣
-(void)loadState
{
NSLog(@"Loading state");
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *statePath = [documentsDirectory stringByAppendingPathComponent:someFileName];
NSData *appData;
NSKeyedUnarchiver *decoder;
appData = [NSData dataWithContentsOfFile:statePath];
if (appData)
{
NSLog (@"file Loaded");
decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:appData];
// set data here using [decoder decodeObject for key...
someUserObject = [decoder decodeIntegerForKey:@"someUserKey"];
someUserScore = [decoder decodeObjectForKey:@"someUserScoreKey"];
}
else
{
NSLog(@"No saved data available or incorrect file name");
}
}
你編碼/解碼你需要的任何自定義類以確保它們符合NSCoding。
爲什麼不使用Game Center來管理分數和成就它的易於使用和無需處理使用NSUserDefault。 –