2014-02-06 3 views
0

Я пытаюсь создать массив из XML-документов. Проблема в том, что я хочу получить только те объекты, где id равен passedID. который является идентификатором из предыдущего диспетчера представлений. Как я могу это реализовать?Получить конкретные объекты из документа xml

Я создал это, что дает мне все фразовые объекты.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString* path = [[NSBundle mainBundle] pathForResource: @"lists" ofType: @"xml"]; 
    NSData* data = [NSData dataWithContentsOfFile: path]; 

    rows = [[NSMutableArray alloc] init]; 



    NSXMLParser* parser = [[NSXMLParser alloc] initWithData: data]; 

    [parser setDelegate:self]; 
    [parser parse]; 


// Do any additional setup after loading the view. 
} 


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([elementName isEqualToString:@"phrase"]) { 
     translation = attributeDict[@"translation"]; 
     meaning = attributeDict[@"meaning"]; 
     pronounce = attributeDict[@"pronounce"]; 
     theId = attributeDict[@"id"]; 

     NSArray *cols = @[translation, meaning, pronounce, theId ]; 

     [rows addObject: cols]; 



    } 

} 
+0

И в чем проблема? Как вы используете этот код? – Wain

+0

Проблема в том, что у меня есть строки NSMutableArray. Которые содержат все объекты из xml-документов. Как я могу создать новый массив, который содержит только те объекты, где идентификатор равен passId? – user3258468

ответ

0

Ваш массив rows содержит массивы ваших данных. Это довольно неэффективно и не очень легко ремонтируется. Вам будет гораздо лучше обслуживать массив словарей или пользовательских объектов. Это будет означать доступ к данным с помощью ключа/имени, что более очевидно и проще. Это также более точно.

В настоящее время вы можете использовать предикат, чтобы проверить, является ли нужный идентификатор IN массивом строк. Но вы можете столкнуться с другими объектами.

При изменении в словаре или пользовательского объекта (вы действительно должны), то вы можете использовать ключ в явном виде в предикате:

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"theId == %@", id]; 
NSArray *requiredRows = [rows filteredArrayUsingPredicate:filterPredicate]; 
Смежные вопросы