Re: [問題] plist與NSDictionary + 多層讀取

看板MacDev作者 (doki)時間14年前 (2011/08/14 20:59), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
不好意思,現在才看到您更新問題,希望不會太遲。 ※ 引述《yueyajbdt (碳烤焦貓)》之銘言: : 我有plist內容如下 : Key Type Value : item 0 (Dict) : Year (String) 2011 : Faculty (Array) : item 0 (String) 商學院 : item 1 (String) 理工學院 : item .... : 商學院 (Array) : item 0 (Dict) : 單修 (Array) : item 0 (String) 科目1 : item 1 (String) 科目2 : 雙修 (Array) : item 0 (String) 科目3 : item 1 (String) 科目1 : item 2 (String) 科目4 : item ..... : 我的想法很單純,設了一個年的Key代表當年,由這個Key去找當年有的學院 : 所以又設了一個Faculty代表所有學院的Key,然後又想把每一個學院都設成一個Key : 來記錄該學院底下所有可選的科目 : 但問題來了,科目有名字相同但其實是不同的兩種科目(單、雙修) : 所以我就想在學院裡面又多了代表單雙修Key,卻發覺不知道怎麼去讀取 : Item 0 Level 0 : Year/Faculty/商學院 Level 1 : 單/雙修 Level 2 : 在objectAtIndex:0的情況下可以找到Level 0底下的Key (Level 1) : 那要怎麼樣才能去找Level 1底下的Key (單/雙修 Level 2)呢? 我個人的理解是在plist中不同的資料型別,皆對應到一種Objective-C class 例如: Dict <-> NSDictionary Array <-> NSArray String <-> NSString ... 所以看您想抓取哪一層的資料,就看上一層的容器型別是哪種(Dict or Array) 再呼叫對應的函示即可,若是還很抽象的話,舉一個例子看看有沒有幫助 例如您已經得到item0,其型別為NSDictionary 那麼如果您希望取得Faculty,那麼寫法會是: NSArray* facultyArray = (NSArray*)[item0 objectForKey:@"Faculty"]; 如果您希望取得商學院的資料: NSArray* business = (NSArray*)[item0 objectForKey:@"商學院"]; 商學院第一個item: NSDictionary* businessItem = (NSDictionary*)[objectAtIndex:0]; 取得單修的資料: NSArray* 單修 = (NSArray*)[businessItem objectForKey:@"單修"]; 就是這樣一直往下。 所以重點在於瞭解plist中的Type與Objective-C的容器相對的關係 希望對您有幫助 : ----舊問題---- 舊問題恕刪 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.249.169.39

08/15 21:01, , 1F
感謝大大詳細的回答 太感謝了:)
08/15 21:01, 1F
文章代碼(AID): #1EHyQo4N (MacDev)
文章代碼(AID): #1EHyQo4N (MacDev)