如何在 iphone 中以编程方式创建 PLIST 文件

Posted

技术标签:

【中文标题】如何在 iphone 中以编程方式创建 PLIST 文件【英文标题】:How to create PLIST files programmatically in iphone 【发布时间】:2011-07-14 17:09:45 【问题描述】:

我希望在目标 C 中以编程方式在我的应用程序 Documents 文件夹中创建 plist 文件。我在文档目录中创建了一个文件夹:

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

我正在尝试创建看起来像 XML 文件的 plist 文件。 /**** 所需的 XML 文件 ****/

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
    <key>height</key>
    <integer>4007</integer>
    <key>name</key>
    <string>map</string>
    <key>width</key>
    <integer>6008</integer>
</dict>
</array>
</plist>

/****通过代码实现文件****/

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>height</key>
    <string>4007</string>
    <key>name</key>
    <string>map</string>
    <key>width</key>
    <string>6008</string>
</dict>
</plist>

所需的文件需要一个数组,在数组中我们有一个字典对象。我怎样才能改变这个? 我也知道如何将文件写入路径,但主要问题是如何创建 plist 文件然后读取它?

【问题讨论】:

我建议你参考这个链接:iphonesdevsdk.blogspot.com/2011/04/plist.html你可以找到最好的解决方案。 【参考方案1】:

PLIST 文件,也称为“属性列表”文件,使用 XML 格式存储数组、字典和字符串等对象。

您可以使用此代码从 plist 文件中创建、添加值和检索值。

//Get the documents directory path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"plist.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path]) 

    path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat:@"plist.plist"] ];


NSMutableDictionary *data;

if ([fileManager fileExistsAtPath: path]) 

    data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

else 
    // If the file doesn’t exist, create an empty dictionary
    data = [[NSMutableDictionary alloc] init];


//To insert the data into the plist
[data setObject:@"iPhone 6 Plus" forKey:@"value"];
[data writeToFile:path atomically:YES];

//To retrieve the data from the plist
NSMutableDictionary *savedValue = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
NSString *value = [savedValue objectForKey:@"value"];
NSLog(@"%@",value);

【讨论】:

您有各种变量,如数据一样定义了两次。你能纠正它,因为我不想调试错误吗? 注意只有属性列表支持的类型才能“正常工作”(developer.apple.com/LIBRARY/ios/#documentation/Cocoa/Conceptual/…),这一点非常重要。所有其他的都必须符合 NSCoding 协议并归档为 NSData 对象以存储在 PLIST 中。 @Kattupoochi:我已经编辑了我的问题。是否可以在数组中添加字典数据? 代码仍然包含重新定义的变量。 @user08092013【参考方案2】:

如果您查看那里的示例,我认为这篇 save to .plist properity list 的帖子会对您有所帮助。

另外,请查看 Apple 的 Creating Property Lists Programmatically 文档以获取其他指南和示例。

【讨论】:

【参考方案3】:

请注意,如果您只想要一个plist 文件来保存数据,您实际上不必创建和保存任何文件。有一种称为NSUserDefaults 的机制。你做类似的事情

[[NSUserDefaults standardUserDefaults] setInteger:1234 forKey:@"foo"];

你读到

NSInteger foo=[[NSUserDefaults standardUserDefaults] integerForKey:@"foo"];
// now foo is 1234

准备要保存的文件,将其写入文件,下次启动应用程序时再次读取,会自动为您完成!

阅读official reference 和official document。

【讨论】:

以上是关于如何在 iphone 中以编程方式创建 PLIST 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS中以编程方式重新启动iPhone应用程序

是否可以在 iPhone Setting Bundle 中以编程方式添加 UISwitch?

如何在 xcode 5 iOS 7 中以编程方式编辑 plist?

如何在iphone中以编程方式实现带有背景图像的按钮

如何在iphone中以编程方式更改按钮文本

如何在 ios 中以编程方式添加约束