2011-05-02 117 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