我正在尝试创建一些使用xml或json显示某些内容的应用程序。
我有很多“观点”,我想从她的身份中选择一个。
XML看起来像那样(如果你愿意,我可以放json但是很难阅读):
<?xml version="1.0" encoding="utf-8"?>
<views>
<view id="home" type="nav">
<title>Help</title>
<section id="1">
<title>Aide</title>
<item id="1" link="dev_mac">Dev Mac</item>
<item id="2" link="dev_iphone">Dev iPhone</item>
<item id="3" link="examples">Examples</item>
</section>
</view>
<view id="dev_mac" type="nav">
<nav_title>Help</nav_title>
<content_title>Dev Mac</content_title>
<text>balbalbalblablablalbalblalbal</text>
<section id="1">
<item id="1" link="lesson_1">Lesson 1</item>
<item id="2" link="download">Downlaod</item>
</section>
</view>
<view id="download" type="content">
<nav_title>Dev Mac</nav_title>
<title>Lesson 1</title>
<content_text>balblablalbalblalbalb</content_text>
<content_title>A. UIKit</content_title>
<content_text>UIKit is .....</content_text>
</view>
</views>
我有一个包含3个NSDictionary(3视图)的数组。
如何通过她的身份选择一个视图?
先谢谢
BiB1
答案 0 :(得分:0)
您无法直接在XML上使用NSPredicate
。您必须将XML(或JSON)解析为一些标准Cocoa容器(NSArray
等),然后在其上使用它。
你能够直接过滤XML的唯一方法是使用像XPath这样的东西,尽管你必须使用libxml来做到这一点。
答案 1 :(得分:0)
它应该工作 - 只要数据变量实际上是一个包含键“id”的字典的数组
NSArray *data = <your xml>
NSString *currentViewId = @"home";
NSArray *filterd = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(id == %@)", currentViewId]];
答案 2 :(得分:0)
尝试将xml重新格式化为plist(您可以使用xcodes plist编辑器或自己编辑)使用:
<plist version="1.0">
<array>
<dict>
<key>Title</key><string>Home</string>
<key>Image</key><string>Home.png</string>
</dict>
<dict>
<key>Title</key><string>Car</string>
<key>Image</key><string>Car.png</string>
</dict>
</array>
</plist
在.h文件中:
NSArray *Views_List;
在.m文件中:
NSString *Views_DataPath = [[NSBundle mainBundle] pathForResource:@"nameOfYourPlist" ofType:@"plist"];
Views_List = [[NSArray alloc] initWithContentsOfFile:Views_DataPath];
然后访问每个字典:
[[Views_List objectAtIndex: 0] valueForKey:@"Title"];
在此示例中,(0)将返回“Home”