13

我正在使用我之前成功使用的一段代码将 plist 加载到数组中:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"species_names" ofType:@"plist"];
NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];

initWithContentsOf 文件失败(数组为空,表明它在应用程序包中找不到 plist)。

在 iPhone 模拟器下,我检查了第一行创建的路径是否指向应用程序文件(确实如此),并使用 Finder 上下文菜单“显示包内容”向自己证明“species_name.plist”实际上在捆绑包——长度表明它包含东西,所以它应该可以工作(并且在我编写的其他 iOS 应用程序中也有)。欢迎提出建议...

[环境 Xcode 4.2 测试版,iOS 4.3.2]。

4

3 回答 3

28

您应该使用实例initWithContentsOfFile:方法,而不是. 这是示例:NSDictionaryNSArray

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"species_names" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:filePath];
NSArray *array = [NSArray arrayWithArray:[dict objectForKey:@"Root"]];

或这个:

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSString    *path = [[NSBundle mainBundle] pathForResource:@"startups" ofType:@"plist"];
NSData      *plistXML = [[NSFileManager defaultManager] contentsAtPath:path];
NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization                     
                                          propertyListFromData:plistXML
mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                          format:&format
                                          errorDescription:&errorDesc];
NSArray *array = [NSArray arrayWithArray:[temp objectForKey:@"Root"]];


编辑

您可以使用使用initWithContentsOfFile:方法NSArray创建的文件的writeToFile:atomically:方法NSArray。创建的 Plist writeToFile:atomically:具有以下结构:

<plist version="1.0">
<array>
    ...Content...
</array>
</plist>

在 XCode 中创建的 Plist 具有以下结构:

<plist version="1.0">
<dict>
    ...Content...
</dict>
</plist>

这就是为什么dosntinitWithContentsOfFile:方法起作用的原因。NSArray

于 2011-08-05T06:11:31.123 回答
3

plist这种类型:

在此处输入图像描述

或(基本上两者都相同)

在此处输入图像描述

可以这样读:

NSString *file = [[NSBundle mainBundle] pathForResource:@"appFeatures" ofType:@"plist"];
NSArray *_arrFeats = [NSArray arrayWithContentsOfFile:file];
NSLog(@"%d", _arrFeats.count);

appFeatures的名字在哪里plist。(iOS 6.1)

于 2013-03-12T12:55:02.040 回答
0

试试这个简单的方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self plistData];
}


- (void)plistData
{
    NSString *file = [[NSBundle mainBundle] pathForResource:@"appFeatures" ofType:@"plist"];
    NSArray *messages = [NSArray arrayWithContentsOfFile:file];
    NSLog(@"%d", messages.count);

    for (int i=0; i<messages.count; i++)
    {
        NSString *data = [messages objectAtIndex:i];
        NSLog(@"\n Data = %@",data);
    }
}
于 2014-01-31T12:49:29.043 回答