Разбор JSON / XML iphone NSPredicate - PullRequest
0 голосов
/ 10 марта 2011

Я пытаюсь создать небольшие приложения, которые используют 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

Ответы [ 3 ]

0 голосов
/ 10 марта 2011

Должно работать - пока переменная данных на самом деле является массивом, содержащим словарь с ключом "id"

NSArray *data =  <your xml>
NSString *currentViewId = @"home";
NSArray *filterd = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(id == %@)", currentViewId]];
0 голосов
/ 10 марта 2011

Попробуйте переформатировать xml как plist (вы можете использовать xcodes plist editor или свернуть свой собственный) использовать:

<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;

В .mfile:

   NSString *Views_DataPath = [[NSBundle mainBundle] pathForResource:@"nameOfYourPlist" ofType:@"plist"];   
    Views_List = [[NSArray alloc] initWithContentsOfFile:Views_DataPath];

, чтобы получить доступ к каждому диктову:

[[Views_List objectAtIndex: 0] valueForKey:@"Title"];

В этом примере (0) вернет 'Home'

0 голосов
/ 10 марта 2011

Вы не можете использовать NSPredicate непосредственно в XML.Вам нужно будет проанализировать XML (или JSON) в некотором стандартном контейнере Какао (NSArray и т. Д.), А затем использовать его для этого.

Единственный способ, которым вы сможете напрямую фильтровать XMLиспользовать что-то вроде XPath, хотя для этого вам нужно перейти на libxml.

...