Plist无法读取......我做错了什么?

时间:2011-12-03 22:15:54

标签: objective-c ios cocos2d-iphone plist

我的Resources文件夹中有一个名为“levelconfig.plist”的plist,我想读一些东西。

我做了以下事情:

-(NSString *) dataFilePath
{
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [path objectAtIndex:0];

    return [documentDirectory stringByAppendingPathComponent:@"levelconfig.plist"];


}

-(void) readPlist{
    NSString *filePath = [self dataFilePath];
    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
        NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];
        NSLog(@"%@",array);
        NSLog(@"%@", filePath);

    }


}

在ccTouchesBegan方法中,我打电话:

[self readPlist];

我的plist包含一个应该正确显示的数组?将级别数据存储在.plist文件中是个好主意吗?

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>Root</key>
    <array>
        <string>sunday</string>
        <string>monday</string>
        <integer>44</integer>
    </array>
</dict>
</plist>

3 个答案:

答案 0 :(得分:1)

您必须先阅读plist中指定的字典。例如:

NSString *mainPath = [[NSBundle mainBundle] bundlePath];
NSString *itemPositionPlistLocation = [mainPath stringByAppendingPathComponent:@"test.plist"];
NSDictionary * itemPositions = [[NSDictionary alloc] initWithContentsOfFile:itemPositionPlistLocation];
NSArray * items = [itemPositions objectForKey:@"Root"];
NSLog(@"%@", items);

我不确定你在用其他代码做什么,但是两行足以加载文件。请原谅变量名称;我很快从我当前的项目中调整了这个。另外,请确保以dealloc或适当的方式释放数组和字典。

答案 1 :(得分:0)

您确定它在您的资源文件夹中吗?在这种情况下,您无法正确构建路径。您可能希望使用[NSBundle pathForResource:]docs

答案 2 :(得分:0)

您的pList文件是一个Dictionary,它在Root键中有一个数组,您正在将其读入数组。

-(void) readPlist{
        NSString *filePath = [self dataFilePath];
    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
        NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:filePath];
        NSArray *array = [[NSArray alloc]initWithArray:[dict objectForKey:@"Root"]];
        NSLog(@"%@",array);
        NSLog(@"%@", filePath);
        [dict release];
        [array release];

    }
}