2012-09-30 82 views
0

过去这一天变得非常令人沮丧:为什么这不起作用?将NSMutableDictionary保存为plist iOS

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",kAllScoresUnorderedArray]]; 

NSMutableDictionary *test = [[NSMutableDictionary alloc] init]; 
[test setObject:@"bob" forKey:@"tmo"]; 

[test writeToFile:path atomically: YES]; 

我以前用过它,它工作的很完美:有什么我忘了添加在我的info.plist中吗?这是我能想到的唯一的事情。

谢谢你的帮忙!编辑: 也许它与Xcode 4.5和iOS6有关?它在4.3/iOS5中工作

+2

当说它不起作用时,你究竟是什么意思?它是否编译,是否崩溃,它创建一个文件? – Till

+0

另外,你为什么使用'stringWithFormat:'而不是'stringByAppendingPathExtension:'? –

+0

这部分看起来有点腥意:[NSString stringWithFormat:@“%@。plist”,kAllScoresUnorderedArray]。 kAllScoresUnorderedArray中有什么? – Baglan

回答

0

您是否已将.plist文件添加到您的项目中?如果是这样,请试试这个:

NSError *error; 
     NSFileManager *fileManager = [[NSFileManager alloc] init]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",kAllScoresUnorderedArray]]; 

    if (![fileManager fileExistsAtPath: path]) 
      { 
       NSString *bundle = [[NSBundle mainBundle] pathForResource:kAllScoresUnorderedArray ofType:@"plist"]; 

       [fileManager copyItemAtPath:bundle toPath: path error:&error]; 
      } 

    NSMutableDictionary *test = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 
    [test setObject:@"bob" forKey:@"tmo"]; 

    [test writeToFile:path atomically: YES]; 

如果没有,请在您的项目中创建属性列表。