如何以结构方式阅读PLIST

时间:2012-05-16 17:03:13

标签: iphone objective-c cocos2d-iphone

这是我如何构建我的PLIST。

<dict>
<key>level1</key>
<dict>
<key>formation</key>
<dict>
    <key>height</key>
    <integer>34</integer>
    <key>width</key>
    <integer>12</integer>

</dict>
</dict>
</dict>

水平&GT;形成&GT;数据

这是我使用的示例代码,但它没有用。

//init loading from PLIST here, and then associate value.
NSString *pathString=[NSString stringWithFormat:@"%@Levels",targetWorld];
NSString *path = [[NSBundle mainBundle] pathForResource:pathString ofType:@"plist"];
NSString *levelNameNumber = [[NSString alloc] initWithFormat:targetLevel];

NSDictionary *levelsList = [[NSDictionary alloc] initWithContentsOfFile:path];
NSDictionary *level = [levelsList objectForKey:levelNameNumber];

NSEnumerator *levelFormations = [level objectEnumerator];

for( NSDictionary *worldSize in levelFormations )
{
    worldWidth = [[worldSize objectForKey:@"width"] intValue];
    worldHeight = [[worldSize objectForKey:@"height"] intValue];

    NSLog(@"height is %d",worldHeight);
    NSLog(@"width is %d",worldWidth);

}

[levelNameNumber release];
[levelsList release];

此代码的问题在于它运行第二个for循环并将高度和宽度返回到ZERO。

有什么想法吗?或者我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:0)

使用plutil检查你的plist并确保它具有有效的语法。

此处有更多详情:http://www.askdavetaylor.com/can_i_check_my_plist_files_in_mac_os_x_for_problems.html

答案 1 :(得分:0)

由于您正在使用levelsList中的对象,并且您最后发布了levelsList,因此您从字典中获取的关卡对象也将被释放。您需要不释放levelsList,保持级别,或者最好开始使用ARC。