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

Reply via email to