On Mar 7, 2015, at 6:34 AM, Diederik Meijer <diede...@tenhorses.com> wrote:

>> On 07 Mar 2015, at 12:36, Ken Thomases <k...@codeweavers.com> wrote:
>> 
>>> 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];
> 

> 
> Thanks Ken, but this does not seem to traverse down into n nested levels, 
> correct?

It does traverse down.  It's just like your code, except generalized.

> The loop goes through the nodeTree's first level children only (pardon the 
> bad semantics here)

Each time through the loop, it reassigns the "array" variable.  So, the next 
time through the loop, it's accessing a deeper level of the tree.

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