【问题标题】:plist in Xcode creationXcode 创建中的 plist
【发布时间】:2011-07-14 12:45:27
【问题描述】:

当我为 plist 创建一个简单的应用程序时,如下链接所示:

http://iosdevelopertips.com/data-file-management/reading-a-plist-into-an-nsarray.html

当我调试它时..我正在获取我的 plist 文件的路径。但是当我使用以下语句时

// Build the array from the plist  
NSMutableArray *array2 = [[NSMutableArray alloc] initWithContentsOfFile:path];

我在 array2 中没有得到任何值...可能是什么问题?

【问题讨论】:

  • 我已将此代码保存在 - (void) viewDidLoad{}
  • 你如何获得路径?你如何创建plist?您是否尝试从主包或应用程序文档目录中对其进行红色化?
  • -(void)viewDidLoad { [super viewDidLoad]; NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkArray" ofType:@"plist"]; NSMutableArray *array2 = [[NSMutableArray alloc] initWithContentsOfFile:path]; for(NSString *str in array2) { NSLog(@"--%@",str); } }
  • 你的 plist 文件在哪里?
  • 我的支持文件组中有 plist 文件。它包含 Root 元素作为 Array 和 Root 数组中的 3 个 Strings 元素

标签: iphone xcode plist


【解决方案1】:

这是我为 plist 得到的最终解决方案....

当你创建你的 plist 文件时,第一个元素是 Array.. 那么它的 XML 内容将如下所示:

<?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>Firecracker</string>
        <string>Lemon Drop</string>
        <string>Mojito</string>
    </array>
</dict>
</plist>

这里你有不必要的标签,而不是我们应该有的标签,因为你的根元素必须是 Array...因为你正在接受 NSMutableArray 对象...

所以你的 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">
    <array>
        <string>Firecracker</string>
        <string>Lemon Drop</string>
        <string>Mojito</string>
    </array>
</plist>

我已经检查过它的工作正常......

【讨论】:

    【解决方案2】:

    问题可能是

    1. 文件在指定路径不存在,你在array2中得到nil
    2. 文件存在,但由于某些格式损坏无法正确读取,并且您在array2 中也得到nil
    3. 文件存在且格式正确,但其中没有值,您得到一个空数组。

    使用NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkArray" ofType:@"plist"]; 时,它假定您的应用程序包中有一个格式正确的名为“DrinkArray”(“DrinkArray.plist”)的 plist 文件。确保您的文件也被复制到应用程序包中(在 Xcode 中检查,单击您的项目,然后单击构建阶段,您的文件应该出现在“复制包资源”中)。

    我猜你得到nil作为文件的路径,因此在array2。尝试记录您的路径字符串以检查它。

    【讨论】:

    • 我检查了“复制捆绑资源”,它显示了 DrinkArray.plist 文件。我在 Xcode 中的项目也在 Supported Files 组中向我展示了该文件。我仍然在 array2 中得到空值...
    • 好的,只需使用NSLog(@"%@", path); 记录您的文件路径并告诉我们它打印的内容
    • /Users/myname/Library/Application Support/iPhone Simulator 4.3/Applications//plistDemo.app/DrinkArray.plist 当我保留 nslog 时,这会显示在路径中
    • 所以如果文件确实存在于这个路径(你可以很容易地检查)并且格式正确(如链接页面上显示的图片),那么应该没有任何问题跨度>
    • 请回帖,这个问题真的很有趣
    【解决方案3】:

    我想你可以试试这样的:

        NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
        NSMutableArray *array = [dict objectForKey:@"Root"];
    
        // Show the string values  
        for (NSString *str in array)
        {
            NSLog(@"--%@", str);
        }
    

    如果有帮助,请留言。 :)

    干杯, 卡米尔

    【讨论】:

      【解决方案4】:

      在 xcode 5 中 > 确保文件在您的编译源区域中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-20
        相关资源
        最近更新 更多