我想从plist文件中检索一个整数,将其递增,然后将其写回plist文件。 “Levels.plist”文件中包含一个键为LevelNumber
的行,其值为1
。
我使用此代码来检索值:
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Levels.plist" ofType:@"plist"];;
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
lvl = [[plistDict objectForKey:@"LevelNumber"]intValue];
NSLog(@"%i", [[plistDict objectForKey:@"LevelNumber"]intValue]);
当我运行它时,我得到控制台输出为0.有人可以告诉我我做错了吗?
答案 0 :(得分:2)
听起来你需要在整个过程中做很多错误检查。
也许是这样的:
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Levels" ofType:@"plist"];
if(filePath)
{
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
if(plistDict)
{
NSNumber * lvlNumber = [plistDict objectForKey:@"LevelNumber"];
if(lvlNumber)
{
NSInteger lvl = [lvlNumber integerValue];
NSLog( @"current lvl is %d", lvl );
// increment the found lvl by one
lvl++;
// and update the mutable dictionary
[plistDict setObject: [NSNumber numberWithInteger: lvl] forKey: @"LevelNumber"];
// then attempt to write out the updated dictionary
BOOL success = [plistDict writeToFile: filePath atomically: YES];
if( success == NO)
{
NSLog( @"did not write out updated plistDict" );
}
} else {
NSLog( @"no LevelNumber object in the dictionary" );
}
} else {
NSLog( @"plistDict is NULL");
}
}
答案 1 :(得分:1)
NSString *filePath = [[NSBundle mainBundle]
pathForResource:@"Levels.plist" ofType:@"plist"];
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc]
initWithContentsOfFile:filePath];
lvl = [[plistDict objectForKey:@"LevelNumber"]intValue];
NSLog(@"%i", [[plistDict objectForKey:@"LevelNumber"]intValue]);
我的猜测是NSBundle在pathForResource:ofType:
来电时返回nil,除非你实际上已经命名了你的文件" Levels.plist.plist"。
请记住,如果该方法恰好返回nil
,则其余代码仍可继续。给定nil
文件路径,NSMutableDictionary
将返回nil,随后从字典中获取对象的调用也将返回nil
,因此您的日志记录调用显示输出为0. / p>
答案 2 :(得分:0)
我发现这种方法对于实际设备本身并不常见。您需要做的是here,this website说明了如何在实际设备上执行此操作