我正在开发一款需要使用plist的游戏。我正确地设置了plist,或者至少我希望,因为我一直在使用这种方法来设置plist。但问题是,在这种情况下,就像plist甚至不被识别。这是我的plist的内容:
'yo'键和值是我用来查看plist是否被识别的调试值。这是我的代码:
-(NSString *)docsDir{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
}
-(void)UpdatePlist{
listPath = [[self docsDir] stringByAppendingPathComponent:@"details.plist"];
self.savedData = [NSMutableDictionary dictionaryWithContentsOfFile:listPath];
unsigned long storedHighScore = [[self.savedData valueForKey:@"High Score"] unsignedLongValue];
NSLog(@"%@",[[self.savedData valueForKey:@"yo"] stringValue]);
NSLog(@"Here");
if (score>storedHighScore) {
[self.savedData setValue:[NSNumber numberWithUnsignedLong:score] forKey:@"High Score"];
NSLog(@"YO %lu",[[self.savedData valueForKey:@"High Score"] unsignedLongValue]);
}
[self.savedData writeToFile:listPath atomically:YES];
}
问题源于我假设的代码或我对plist的声明。正如预期的那样,所有NSLog都会执行,但我的日志文件更有趣:
即使是测试字符串也不会被返回并被视为null。在这一点上,我假设plist有问题,是的,我可以向你保证plist的名字确实是details.plist。
答案 0 :(得分:1)
这个plist在哪里?何时/如何最初写入文件目录?
文档目录是从iTunes复制文件的目录。因此,如果您将此文件放入应用程序的资源中,它将不会以文档结尾。
当plist不存在时,-dictionaryWithContentsOfFile:
将返回nil
。在-objectForKey:
上呼叫-stringValue
或nil
会再次返回nil
。因此,如果该文件不存在,self.savedData
将设置为nil
。在-writeToFile:atomically:
上拨打nil
也是无操作。所以你发布的代码永远不会创建plist,如果它还没有。
您是否尝试在调试器中单步执行此代码?点击-dictionaryWithContentsOfFile:
行左侧的装订线,查看self.savedData
设置的内容?