我正在尝试从xml文档创建一个数组。问题是我只想获得id等于passedID
的对象。这是来自前一个viewcontroller的id。我该如何实现呢?
我创建了这个,它给了我所有的短语对象。
- (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 :(得分:0)
您的rows
数组包含数据数组。这相当低效且不易维护。使用一组字典或自定义对象可以更好地服务。这意味着按键/名称访问数据更明显,更容易。它也更准确。
目前,您可以使用谓词来检查所需的id是否为行数组IN
。但是你可能会遇到与其他物体的碰撞。
如果您更改为字典或自定义对象(您确实应该),那么您可以在谓词中显式使用该键:
NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"theId == %@", id];
NSArray *requiredRows = [rows filteredArrayUsingPredicate:filterPredicate];