在Objective-c中将数据写入plist的函数

时间:2011-10-10 04:21:55

标签: objective-c plist

假设我有一个名为savePlist的自定义函数,如下所示。

CommonClass.m

- (NSString *)getDirectoryPath
{
    NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [pathList objectAtIndex:0];
    return path;
}

- (void)savePlist:(NSString *)fileName WithArray:(NSArray *)fileArr
{
    NSString *path = [[self getDirectoryPath] stringByAppendingPathComponent:fileName];
    [fileArr writeToFile:path atomically:YES];
}

当我运行如下代码时,不会生成任何plist。

ABCAppDelegate.m

...
[cc savePlist:@"example.plist" WithArray:[NSArray new]];

尚未生成example.plist的文件,我的代码是否有任何错误?

由于

更新:

如果我使用下面的代码,则xxx.plist文件已成功生成。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *plistFile = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"abc.plist"];
NSMutableDictionary *plist = [[NSMutableDictionary alloc] initWithContentsOfFile:plistFile];

if (!plist) {
    plist = [NSMutableDictionary new];
    [plist writeToFile:plistFile atomically:YES];
    NSLog(@"write plist");
}

参考:link

更新2:

我更改了以下代码:

NSLog(@"code");
[cc savePlist:@"example.plist" WithArray:[NSArray new]];
NSLog(@"code");

- (void)savePlist:(NSString *)fileName WithArray:(NSArray *)fileArr
{
    NSLog(@"fileName = %@, fileArr = %@", fileName, fileArr);
    NSString *path = [[self getDirectoryPath] stringByAppendingPathComponent:fileName];
    NSLog(@"path = %@", path);
    [fileArr writeToFile:path atomically:YES];
}

它打印出来:

2011-10-10 14:24:00.560 ABC[3390:207] code
2011-10-10 14:24:00.561 ABC[3390:207] code

没有fileName =和fileArr =的消息,还有path = print out on log,所以savePlist中的代码还没有被执行?

1 个答案:

答案 0 :(得分:0)

看起来您的公共类对象未实例化,并且您将所有这些消息发送到nil。尝试在您的应用委托代码中记录cc,您可以在其中调用此方法。

您需要创建公共类的实例,例如

cc = [[CommonClass alloc] init];

(可能因您的设置而异)。