2013-03-24 25 views
0

林在我的智慧結束在這裏,請幫助我你美麗的人!正確組織數據Plist中的數據

我的難題是這樣的:

我有100種藥物的清單。每個人都有一個名字,每個人都有一個與之關聯的網址,每個人都在1-8節。我需要在表格視圖中創建藥物名稱列表。當選擇特定藥物時,藥物名稱,其部分及其URL需要傳遞給另一個視圖控制器。

我知道如何實現所有的gubbins傳遞給另一個控制器,設置表視圖等我只是不知道如何組織數據在一個plist文件,以便它可以在程序中訪問以及如何保持每種藥物鏈接到其網址和部分。

任何想法?我一直在用字典,數組和對象來搞亂7個小時的最佳過去。我想我可能會哭,如果我不很快排序!

非常感謝,

露西

+0

您是否能連接到使用的plist理由嗎?將數據存儲在純文本文件中然後解析它可能會更簡單。 – Luke 2013-03-24 21:23:09

+0

沒有理由 - 我只是假設這將是最簡單的方法來組織它 - 我打開建議,讓這個吸盤完成! :) – Giovanni 2013-03-24 21:27:25

回答

0

這裏是如何做到這一點:

<?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>Drug name</string> 
    <key>url</key> <string>http://www.urltodrug.com/Drug%20name</string> 
    <key>section</key> <integer>5</integer> 
    </dict> 
</array> 
</plist> 

只需添加更多<dict> S和你做。

把所有到一個數組:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Drugs" ofType:@"plist"]; 
self.dataArray = [NSArray arrayWithContentsOfFile:path]; 

要通過部分和藥名的數組排序:

NSArray *sortedArray = [self.dataArray sortedArrayUsingSortDescriptors:@[ 
    [NSSortDescriptor sortDescriptorWithKey:@"section" ascending:YES], 
    [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES] 
]]; 

爲了減少陣列只顯示名稱:

NSArray *namesArray = [sortedArray valueForKeyPath:@"name"]; 

歡迎來到NSDictionary和「Key-Value-Coding」!

要在單元格顯示名稱:

NSDictionary *dataDict = [self.dataArray objectAtIndex:indexPath.row]; 
cell.textLabel.text = [dataDict objectForKey:@"name"]; 
+0

但我將如何創建一個名單?然後保持名稱/網址/部分相互關聯,以便在表格視圖中選擇其中一個項目時,將相關信息傳遞給新視圖控制器?我不知道如何從所有不同的字典中提取所有基於「名稱」的項目?對不起... :) – Giovanni 2013-03-24 21:42:29

+0

看到我上面的答案。這樣的字典數組不僅可以進行排序,而且可以方便地進行過濾等。但請注意,這不是必需的:只需使用字典中「名稱」鍵中的正確值設置單元格中的標籤文本即可。 – Mundi 2013-03-24 21:49:00

+0

Mundi你的一個chuffing天才!我花了整整一天的時間試圖在5分鐘內完成你所做的事!我永遠感謝你,一旦我獲得15位以上的代表病態,就會回到這裏,並且會像+1按鈕上的無名商人一樣點擊。謝謝:) – Giovanni 2013-03-24 22:52:12