将plist文件中的数据存储到数组中

时间:2014-02-24 18:19:41

标签: objective-c xcode nsarray nsdictionary plist

我昨天花了很多时间试图解决这个问题而根本没有运气。这是我正在使用的代码。

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"];

NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];

NSArray *array = [NSArray arrayWithArray:[dict objectForKey:@"root"]];

for(int num = 0; num < 5; num++)
{
NSLog(@"my array:%@", array);
}

NSLog(@"items in my array: %lu", (unsigned long) [array count]);

以下是我正在使用的plist文件的视图。

<plist version="1.0">
<dict>
<key>New item</key>
<string>hello</string>
<key>New item - 2</key>
<string>world</string>
<key>New item - 3</key>
<string>again</string>
<key>New item - 4</key>
<string>and</string>
<key>New item - 5</key>
<string>again</string>
</dict>
</plist>

当我尝试在NSDictionary上使用NSArray时,此代码不会返回null,但是当我运行它时,控制台不会打印出从plist中检索到的任何数据。它打印出来:

my array:{}
my array:{}
my array:{}
my array:{}
my array:{}
items in my array: 0

如果我尝试通过将NSLog更改为NSLog(@“my array:%@”,array)来打印出dict;我明白了。

my array:(NULL)
my array:(NULL)
my array:(NULL)
my array:(NULL)
my array:(NULL)
items in my array: 0

4 个答案:

答案 0 :(得分:0)

您是否尝试将dict中的所有值放入数组中? 如果是这样,请添加:

NSArray *array = [NSArray arrayWithArray:[dict allValues]];

//检查文件;

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"];

if (![[NSFileManager defaultManager] fileExistsAtPath:path])
    NSLog(@"NO FILE AT PATH: %@", path);

答案 1 :(得分:0)

你可以为这样的plist打印的所有东西都是 NSLog(dict [@“new item”]);

你也可以使用

for(int num = 0; num < array.count; num++)
{
    NSLog(@"my array:%@", array[i]);
}

而不是

for(int num = 0; num < 5; num++)
{
    NSLog(@"my array:%@", array);
}

答案 2 :(得分:0)

不知道字典中的键是什么?在这种情况下无需担心密钥。试试这个

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
if(dict.count != 0)
  {
    NSArray *array = [dict allKeys];
    for(int num = 0; num < array.count; num++)
      {
        NSLog(@"my array item:%@", [dict objectForKey:array[num]]);
      }
  }
else
  {
    NSLog(@"Your dictionary is empty.");
  }

答案 3 :(得分:0)

我发现了这个问题。我必须创建一个构建阶段并将plist文件添加到它。这样当我使用pathToResource ofFile时,它有一个文件可以在我使用剩下的代码时找到。