On Mar 7, 2015, at 5:02 AM, Diederik Meijer <diede...@tenhorses.com> wrote:
> This is part of XML parsing with NSXMLParser, is there any way to avoid this > type of staircasing by constructing a keyPath dynamically? > > if (self.nestingLevel == 1) { [[[self.rootparser nodeTree] > lastObject][@"items"] addObject:dict]; } > if (self.nestingLevel == 2) { [[[[self.rootparser nodeTree] > lastObject][@"items"] lastObject][@"items"] addObject:dict]; } > if (self.nestingLevel == 3) { [[[[[self.rootparser nodeTree] > lastObject][@"items"] lastObject][@"items"] lastObject][@"items"] > addObject:dict]; } > if (self.nestingLevel == 4) { [[[[[[self.rootparser nodeTree] > lastObject][@"items"] lastObject][@"items"] lastObject][@"items"] > lastObject][@"items"] addObject:dict]; } > > As you can see the action is always the same: addObject:dict > > But depending on the level of nesting, lastObject][@"items”] needs to be > added multiple times to the self.rootparser’s nodeTree property. > > Is there any way to use a loop that runs for self.nestingLevel times and adds > the extra levels to the keyPath just as many times as needed and then use > that to access the noteTree at the exact right level? No. Key paths can't index into arrays. However, you can just use a simply for loop. Something like: NSMutableArray* array = [[self.rootparser nodeTree] lastObject][@"items"]; for (int i = 1; i < self.nestingLevel; i++) array = array.lastObject[@"items"]; [array addObject:dict]; Regards, Ken _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com