作者dokinkon (doki)
看板MacDev
标题Re: [问题] plist与NSDictionary + 多层读取
时间Sun Aug 14 20:59:28 2011
不好意思,现在才看到您更新问题,希望不会太迟。
※ 引述《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
1F:推 yueyajbdt:感谢大大详细的回答 太感谢了:) 08/15 21:01