物业清单 - 阅读和写作(iPhone)

时间:2009-11-01 18:31:13

标签: iphone objective-c

好的,到此为止。我正在制作一个非常基本的应用程序,我希望用户能够在会话之间存储信息。基本上,为他们保存他们的游戏。我只需要保存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一起玩,但是不能让我的生活让它发挥作用。

这就是我的问题。我无法从属性列表中读取值。我希望你的帮助能解决这个问题,谢谢!

2 个答案:

答案 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 ];

你释放数组,你的字符串被自动释放