如何从plist iOS中读取数组

ram*_*013 25 objective-c ios swift

我试图读取包含数组的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>key1</key>
<string>value1</string>
<key>key2</key>
<string>value2</string>
<key>keyarray1</key>
<array>
    <string>keyitem1</string>
    <string>keyitem2</string>
</array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

当我尝试读取valueForKey:@"keyarray1"时,我得到null值.我试着读作一个字符串和数组螺母没用.

我的守则

NSDictionary * values=[[NSDictionary alloc] initWithContentsOfFile:@"values.plist"];
NSArray *arrayValues=[[NSArray alloc] initWithArray:[values valueForKey:@"keyarray1"]];
Run Code Online (Sandbox Code Playgroud)

rpt*_*thi 67

首先检查你的plist看起来像:

在此输入图像描述

现在写下您访问plist的以下行

Objective-C的:

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Values" ofType:@"plist"]];
NSArray *array = [dictionary objectForKey:@"keyarray1"];
NSLog(@"dictionary = %@ \narray = %@", dictionary, array);
Run Code Online (Sandbox Code Playgroud)

这是我工作窗口的完整屏幕截图(带日志输出):

在此输入图像描述

迅速:

let dictionary = NSDictionary(contentsOfFile: Bundle.main.pathForResource("Values", ofType: "plist")!);
let array = dictionary?["arrayKey"] as! NSArray
print("dictionary=",  dictionary, "\narray =",  array)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Arn*_*yno 5

我知道这个问题太旧了,我只想为最近遇到此问题的人添加更多信息.

在我的例子中,我创建了一个plist作为Array(plist默认为Dictionary,键为"Root").

在此输入图像描述

那么xml看起来像这样:

在此输入图像描述

在我的视图控制器上,我直接初始化数组而不是初始化Dictionary然后获取键"Root"的对象:

在此输入图像描述

注意:我只想添加此信息,因为我只看到初始化Dictionary然后获取键的对象.希望它会帮助你们.