好的,到此为止。我正在制作一个非常基本的应用程序,我希望用户能够在会话之间存储信息。基本上,为他们保存他们的游戏。我只需要保存7个变量,所有变量都是整数。
这是我保存游戏的代码。
- (NSString *)dataFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:fileName];
}
- (IBAction)saveGameAction:(id)sender
{
NSString *test1 = [[NSString alloc] initWithFormat:@"%d",varMoney];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:test1];
[array writeToFile:[self dataFilePath] atomically:YES];
[array release];
[test1 release];
}
那是有效的(为了简单起见,我只存储了1个变量,而不是这个示例代码中的所有7个。什么不起作用是从属性列表中检索值。在点击“加载”按钮时,我想要将变量从列表中取出并将其放回正确的变量中。这是我的代码:
- (IBAction)loadGameAction:(id)sender
{
NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
NSString *testing = [array objectAtIndex:0];
[array release];
varMoney = [testing intValue];
NSString *testMessage = [[NSString alloc] initWithFormat:@"%d", varMoney];
//NSString *testMessage = [[NSString alloc] initWithFormat:@"%@", testing];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Test"
message:testMessage
delegate:nil cancelButtonTitle:@"Cool"
otherButtonTitles:nil];
[alert show];
[alert release];
}
每当我加载代码时,程序崩溃。理想情况下,我想将Int直接存储在Property List中,而不是NSStrings中,然后从Property列表中检索Int。我试着和NSNumber一起玩,但是不能让我的生活让它发挥作用。
这就是我的问题。我无法从属性列表中读取值。我希望你的帮助能解决这个问题,谢谢!
答案 0 :(得分:4)
请点击NSUserDefaults
,而不是只为7个值搞乱。实施起来非常简单,可靠。
保存:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:42 forKey:@"integerKey"];
[prefs synchronize];
检索:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSInteger myInt = [prefs integerForKey:@"integerKey"];
答案 1 :(得分:1)
你不需要做用户默认
代码中的只需更改一行就可以了:
NSString * testing = [[array objectAtIndex:0] retain ];
你释放数组,你的字符串被自动释放