plist XML字符串到NSMutableDictionary

amc*_*mcc 3 objective-c nsdictionary plist foundation

我在plist文件(iOS)中存储了一些字典,这些字典随后被加密.在读取文件内容并解密后,我将以字符串形式返回文件的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">
<dict>
    <key>password</key>
    <string>apassword</string>
    <key>username</key>
    <string>ausername</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

我知道这些方法:dictionaryWithContentsOfFile:(NSString *)dictionaryWithContentsOfFile:(NSURL *)从这种类型的数据创建一个字典,但我很惊讶没有这样的dictionaryWithXML:(NSString *)

没有将这些数据写入文件然后阅读它,我试图避免的东西,因为它只是过度,有什么明显的解决方法,我缺少?

Mon*_*olo 7

NSPropertyListSerialization从一个NSData实例读取,有一个方便的方法为你做到:

NSString *source = ... // The XML string

NSData* plistData = [source dataUsingEncoding:NSUTF8StringEncoding];

NSError *error;

NSMutableDictionary* plist = [NSPropertyListSerialization propertyListWithData:plistData
                                                                       options: NSPropertyListImmutable
                                                                        format:NULL
                                                                         error:&error];
Run Code Online (Sandbox Code Playgroud)

正如@Adam在评论中所指出的,这种方法返回的字典总是可变的.该options参数用于确定plist中保存的容器(数组,字典)是否也是可变的或(默认的)不可变的.

如果您希望属性列表中的容器也是可变的,则可以使用NSPropertyListMutableContainers- 或者NSPropertyListMutableContainersAndLeaves,如果您甚至需要叶子是可变的.