Hi,
On Tue, 16 Aug 2011 11:03:30 -0700, Tito Ciuro <[email protected]> wrote:
> In KVC, the setValue:forKeyPath: method is super handy to set values in deep
> hierarchies. I was wondering if it would be possible to access array elements
> using KVC. I haven't seen any reference about it in the docs, so I was
> wondering if it's at all possible. Example:
Yes, it is super handy, but as far as I searched there was no way at least
until 10.6.x … there might be changes in 10.7, but I didn't know
> Traversing it manually isn't a problem, but if KVC can do it for me, then
> great!
In my SuperClass all classes needed this (and many, many more) I implemented
(but probably not highly optimized!)
- (id)valueForUndefinedKey:(NSString *)key
{
if ([key rangeOfString:@"#"].location != NSNotFound) {
// hack for using array operators in binding!
NSArray *keyArray = [key componentsSeparatedByString:@"#"];
NSString *arrayKey = [keyArray objectAtIndex:0];
NSString *pathKey = [keyArray objectAtIndex:1];
arrayKey = [arrayKey stringByReplacingOccurrencesOfString:@"#"
withString:@""];
pathKey = [pathKey stringByReplacingOccurrencesOfString:@":"
withString:@"."];
pathKey = [@"@" stringByAppendingString:pathKey];
NSArray *resultList = [self valueForKey:arrayKey];
id result = [resultList valueForKeyPath:pathKey];
return result;
}
if ([key rangeOfString:@"_"].location != NSNotFound) {
// hack for using a "objectAtIndex" notation in KVC
NSArray *keyArray = [key componentsSeparatedByString:@"_"];
NSString *arrayKey = [keyArray objectAtIndex:0];
NSString *indexKey = [keyArray objectAtIndex:1];
NSArray *resultList = [self valueForKey:arrayKey];
if ([resultList count] <= [indexKey intValue])
return nil;
id result = [resultList objectAtIndex:[indexKey intValue]];
return result;
}
…..
}
The first ones allow
positions.#sum.internalCostNettoTotals
AFAIR I choose the "#" instead of "@" due to some parsing issues
The second allow me something like
producer_0.area_0.vineyards_2.idname
regards
Thorsten Hohage
--
objectmanufactur.com - Hamburg,Germany
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]