从Plist读取信息以在TableView中使用

时间:2011-05-02 14:40:13

标签: iphone ios 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>001</key>
    <dict>
        <key>Name</key>
        <string>Name1</string>
        <key>Number</key>
        <string>001</string>
    </dict>
    <key>002</key>
    <dict>
        <key>Name</key>
        <string>Name2</string>
        <key>Number</key>
        <string>002</string>
    </dict>
</dict>
</plist>

我正在尝试将此代码转换为数组并用于TableView源代码。然而,即使我认为我已经看到其他帖子,没有人帮助我(我可以看到,这是我的第一个真正的iOS项目,所以我可能不是100%操纵他们的代码)。我希望从这个Plist生成表格,因为它将至少有100个项目(通过Plist添加更多项目),我希望生成它。
然而,我正在努力做的主要事情是让数组从Key1,然后Key2,Key3获取信息......就像在下面的手动代码中那样(我必须手动输入,我会添加更多信息,所以我希望它来自Plist):

NSDictionary *item1 = [[NSDictionary alloc] initWithObjectsAndKeys:
                          @"Name1", @"Name", @"001", @"Number", nil]; 
NSDictionary *item2 = [[NSDictionary alloc] initWithObjectsAndKeys:
                              @"Name2", @"Name", @"002", @"Number", nil];
NSDictionary *item3 = [[NSDictionary alloc] initWithObjectsAndKeys:
                              @"Name3", @"Name", @"003", @"Number", nil];

我想要的一件事是能够改变表格的显示顺序(在数字和字母之间),我认为这不是很重要,但是我想把它放在那里,因为某些意义无法做到的事情,我犯了一个错误? 谢谢你的阅读,
约瑟夫达菲

编辑:已解决但新问题请阅读以下内容。 现在解决了,谢谢! 感谢您提供的信息,它最有用!但是,当我提出以下内容时:

- (void)viewDidLoad
{
    NSBundle *bundleLocation = [NSBundle mainBundle];
    NSString *arrayLocation = [bundleLocation pathForResource:@"plistname" ofType:@"plist"];
    NSArray *plistcontentsArray = [[NSArray alloc] initWithContentsOfFile:arrayLocation];
    self.pokemonNames = pokemonArray;

    [bundleLocation release];
    [plistArray release];

    [super viewDidLoad];
}

一切正常。但是当我添加[arrayLocation release];时,它会以“exc_bad_access”崩溃。有任何想法吗? :)

1 个答案:

答案 0 :(得分:1)

只需在属性列表中使用“array”元素而不是“dict”元素。例如:

<?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>
    <dict>
        <key>Name</key>
        <string>Name1</string>
        <key>Number</key>
        <string>001</string>
    </dict>
    <dict>
        <key>Name</key>
        <string>Name2</string>
        <key>Number</key>
        <string>002</string>
    </dict>
</array>
</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>Name1</string>
    <string>Name2</string>
</array>
</plist>

要在属性列表中加载数组,只需使用以下命令。 (将“Array”更改为属性列表的名称,并且可能使用NSArray的实例变量。)

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

并从您可以使用的数组中提取信息:

NSString * name = [array objectAtIndex:0];

至于字母顺序,你可以在这里找到如何做到这一点:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html#//apple_ref/doc/uid/20000132-SW5