2011-05-02 60 views
0
使用


我检查了其他职位,但似乎不回答我的问题,所以在这里我去:)
我有一个plist中,其内容如下:从读取PLIST信息TableView中

<?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”一起崩溃。有任何想法吗? :)

+0

的NSDictionary的NSArray和两个有'initWithContentsOfFile'方法,其可使用d从plist得到一个字典/数组 – albertamg 2011-05-02 14:56:14

回答

1

只需使用“数组”元素而不是属性列表中的“字典”元素。例如:

<?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> 

要在属性列表中加载数组,只需使用以下内容。 (改变“阵列”的属性列表的名称,更可能使用的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

+0

你应该只发布一些你拥有的东西,也就是你调用alloc,copy,new或者保留它。既然你不这样做,你不需要释放它。 – Jamie 2011-05-02 16:30:33

+0

感谢您的帮助! X2我还有一些东西要学习,所以谢谢你的时间:) – 2011-05-02 16:31:04