我们如何在ios 5中复制NSDefault中的plist

时间:2011-11-25 14:36:22

标签: iphone objective-c ipad

如何在iOS 5中的nsdefault中复制plist

这是我的代码:

NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPlistPath = [documentsDirectory stringByAppendingPathComponent: 
                         [NSString stringWithFormat: @"%@.plist", @"Bookmark"] ];


// If it's not there, copy it from the bundle
NSFileManager *fileManager = [NSFileManager defaultManager];
if ( ![fileManager fileExistsAtPath:myPlistPath] ) {
    NSString *pathToSettingsInBundle = [[NSBundle mainBundle] 
                                        pathForResource:@"Bookmark" ofType:@"plist"];

    [fileManager copyItemAtPath:pathToSettingsInBundle toPath:myPlistPath error:&error];
}
[myPlistPath retain];
[myPlistPath release];

它在模拟器中正确运行,但在设备上崩溃。

1 个答案:

答案 0 :(得分:1)

首先,NSDefault不是一个东西,提供的代码甚至不使用NSUserDefaults,如果这就是你的意思,

现在的行:

[myPlistPath retain];
[myPlistPath release];

是完全多余的,摆脱它们。

现在在调试时使用一些常识。

  • cmd-shift-y调出控制台,看看它说的是什么。
  • 检查捆绑包上是否存在Bookmark.plist,检查文档目录中是否存在if (error) NSLog(@"Error:%@",error);。检查模拟器和设备。
  • 执行崩溃在哪里?
  • 设置一些日志,例如if ( ![fileManager fileExistsAtPath:myPlistPath] )记录生成的路径。
  • {{1}}评估为真还是假。设置另一个日志。
  • 使用zombies工具对运行进行概要分析。

下次遇到困难时,先做一些工作。