如何在iOS编程中使用pList



最近,我是一名高三学生,我对制作iPhone应用程序很感兴趣。最近,我的一个应用程序问世了:NBlock。这是一款益智应用,非常具有挑战性。然而,它也有一些问题。高分不被保存。我被告知要使用列表。任何建议吗?

基于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];

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

查看本教程,了解如何使用NSUserDefaults的简单指南。当你写完信后,一定要把synchronizeNSUserDefaults联系起来。

如果你正在寻找一个更强大(但更复杂)的方式来保存数据,看看苹果的指南使用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];

并且在array的声明中用initWithContentsOfFile:@"scores.plist"代替init来添加新的分数。你可以选择使用NSUserDefaults

看看NSKeyedArchiver/Unarchiver。你可以保存任何你想要的东西;根据我的经验,NSUserDefaults会在你从托盘中关闭应用时转储数据。如果您正在使用sqlite等数据库管理大量数据,那么Core data的使用效果会更好。

我想说,下面的代码将工作,非常直接,除非使用自定义对象数据类型(这又是一个不同的故事):

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属性可能有助于检查最后一次更新分数的时间。

最新更新