キーはピリオドが含まれている場合:それはNSDictionaryののvalueForKeyPathを起動することは可能ですか?
-
26-09-2019 - |
質問
私はcom.apple.schedulerのplistの中repeatIntervalキーの値を取得しようとしています。私はちょうど使用NSDictionaryののvalueForKeyPathしたいと思います:
:そうのような方法をCFPropertyListRef value;
value = CFPreferencesCopyValue(CFSTR("AbsoluteSchedule"),
CFSTR("com.apple.scheduler"),
kCFPreferencesCurrentUser,
kCFPreferencesCurrentHost);
NSNumber *repeatInterval = [(NSDictionary *)value valueForKeyPath:@"com.apple.SoftwareUpdate.SUCheckSchedulerTag.Timer.repeatInterval"];
しかし、これに伴う問題は、最初のキーが本当に「com.apple.SoftwareUpdate」だけではなく、「COM」であるということです。私は別にその最初の値を取得することによって、これを回避できます:
NSDictionary *dict = [(NSDictionary *)value valueForKey:@"com.apple.SoftwareUpdate"];
NSNumber *repeatInterval = [dict valueForKeyPath:@"SUCheckSchedulerTag.Timer.repeatInterval"];
私はちょうど私がこの余分なステップを排除することができるようにキーパスにピリオドをエスケープする方法があるかどうかを知りたいと思っています。
解決
方法:
NSDictionaryのはvalueforKeyPathを持っていません。それはちょうどあなたの問題の根本であるNSObjectの実装を呼び出します。
たぶん、あなたはあなた自身のエスケープ文字とNSDictionaryの上のカテゴリにそれを再実装できます。
所属していません StackOverflow