使用arrayWithContentsOfFile加载的数组元素为null

时间:2014-06-03 17:36:13

标签: ios objective-c nsdictionary plist

我目前正在使用Xcode 5中的Objective-C项目。 我有一个文件Data.plist,一个NSDictionaries数组,其格式如下:

<?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>
        Name
    </key>
    <string>
        Robert Aderholt
    </string>
    <key>
        Party
    </key>
    <string>
        Republican
    </string>
</dict>
........
</array> 
</plist>

我正在使用以下行加载到一个数组中:

 NSArray *arrayOfCongressMen =[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource: @"Data" ofType: @"plist"]];

我可以通过以下方式成功使用NSLog

NSLog(@"Full array: %@",arrayOfCongressMen); //print successfully

NSLog(@"First dictionary of array: %@", arrayOfCongressMen[0]); //prints successfully

最后:

NSLog(@"Object for key Name in the first dictionary of the array: %@", [arrayOfCongressMen[0] objectForKey:@"Name"]); 

最后NSLog打印出(null)到控制台。

请帮忙!

编辑:已解决

我的plist文件格式化创建了换行符和间距,因此我的词典键包含&#34; \ n&#34; s和&#34; &#34; S

我通过Ctrl-F修复它并用空字符串替换所有空格。

1 个答案:

答案 0 :(得分:0)

正如您应该经常进行调试一样,将其分解。在调用arrayWithContentsOfFile之后,你会得到一个数组吗?

如果你从数组中获取第一个对象,它是什么?

id firstObject = arrayOfCongressMen[0];

NSLog(@"first object class = %@", [firstObject class]);