Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to invoke NSDictionary's valueForKeyPath: when a key contains periods?

I'm trying to get the value of the repeatInterval key in the com.apple.scheduler plist. I'd like to just use NSDictionary's valueForKeyPath: method like so:

CFPropertyListRef value;
value = CFPreferencesCopyValue(CFSTR("AbsoluteSchedule"),
                               CFSTR("com.apple.scheduler"),
                               kCFPreferencesCurrentUser,
                               kCFPreferencesCurrentHost);
NSNumber *repeatInterval = [(NSDictionary *)value valueForKeyPath:@"com.apple.SoftwareUpdate.SUCheckSchedulerTag.Timer.repeatInterval"];

But the problem with this is that the first key is really "com.apple.SoftwareUpdate", not just "com". I can get around this by getting that first value separately:

NSDictionary *dict = [(NSDictionary *)value valueForKey:@"com.apple.SoftwareUpdate"];
NSNumber *repeatInterval = [dict valueForKeyPath:@"SUCheckSchedulerTag.Timer.repeatInterval"];

I just wanted to know if there is a way to escape periods in a keypath so I can eliminate this extra step.

like image 697
Jonukas Avatar asked Nov 15 '22 10:11

Jonukas


1 Answers

NSDictionary doesn't have a valueforKeyPath: method. It just invokes the NSObject implementation which is the root of your problem.

Maybe you could reimplement it in a category on NSDictionary with your own escape characters.

like image 108
JeremyP Avatar answered Dec 10 '22 23:12

JeremyP