我昨天花了很多时间试图解决这个问题而根本没有运气。这是我正在使用的代码。
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
答案 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时,它有一个文件可以在我使用剩下的代码时找到。