如何在iOS编程中使用pList

最近,我是高中的高中,我有兴趣为iPhone制作应用程序。 最近,我的一个应用程序出来了:NBlock。 这是一个谜题应用程序,非常具有挑战性。 但是,它有一些问题。 高分不会被保存。 我被告知使用plist。 有小费吗?

基于URL的方法:

// Get the URL for the document directory NSFileManager *fileManager = [[NSFileManager alloc] init]; NSURL *documentDirectoryURL = [[fileManager URLsForDocumentDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0]; // Turn the filename into a string safe for use in a URL NSString *safeString = [@"scores.plist" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // Create an array for the score NSMutableArray *array = [[NSMutableArray alloc] init]; [array addObject:[NSNumber numberWithInt:score]]; // Write this array to a URL NSURL *arrayURL = [NSURL URLWithString:safeString relativeToURL:documentDirectoryURL]; [array writeToURL:arrayURL atomically:YES]; 

我会避免使用plist。 到目前为止,在应用程序中保存简单数据的最简单方法是NSUserDefaults

查看本教程以获取有关如何使用NSUserDefaults的简单指南。 当你写完之后,一定要确保synchronize NSUserDefaults

如果您正在寻找更强大(但更为复杂)的方式来保存数据,请查阅Apple使用Core Data的指南。

下面是你想要的:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"scores.plist"]; NSMutableArray *array = [[NSMutableArray alloc] init];     [array addObject:[NSNumber numberWithInt:score]];      [array writeToFile:path atomically:YES]; 

并添加新的分数做initWithContentsOfFile:@"scores.plist"而不是在声明arrayinit 。 你可以select使用NSUserDefaults。

看看NSKeyedArchiver / Unarchiver。 你可以节省几乎任何你想要的; 根据我的经验,NSUserDefaults会在您从托盘中删除应用程序时转储您的数据。 如果用数据库(如sqlite)pipe理大量数据,核心数据的使用效果会更好。

我会说下面的代码将工作,非常简单,除非使用自定义对象数据types(它是一个不同的故事):

 NSString* plistPath = nil; NSFileManager* manager = [NSFileManager defaultManager]; if ((plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"PathTo.plist"])) { if ([manager isWritableFileAtPath:plistPath]) { NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; [infoDict setObject:@"foo object" forKey:@"fookey"]; [infoDict writeToFile:plistPath atomically:NO]; [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil]; } } 

设置date属性可能有助于检查最后一次分数何时更新。