好的,我正在尝试将我的调整捆绑更新为NSMutableArray
, valididentifiers 的值,该值填充了用户选择的应用标识符,例如{{ 1}}如果用户在我的调整中选择了偏好包中的safari应用程序。但是我现在正在尝试使用下面的代码更新计算受支持捆绑包的plist,但是当我希望更新到 Bundles 键时,它只检测过滤器键。我知道它只是通过记录com.apple.mobilesafari
bundlesplist
属性并在syslog中观察来检测过滤器作为有效密钥。
所以我的问题是如何专门更新下面显示的plist中的allKeys
部分?
test.plist文件结构:
Bundles
我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Filter</key>
<dict>
<key>Bundles</key>
<array>
<string>com.apple.mobilesafari</string>
<string>com.apple.springboard</string>
</array>
</dict>
</dict>
</plist>
所有凯斯的系统日志输出
NSMutableDictionary *bundlesplist = [NSMutableDictionary dictionaryWithContentsOfFile:@"/Library/MobileSubstrate/DynamicLibraries/test.plist"];
NSLog(@"%@", bundlesplist);
NSLog(@"%@", [bundlesplist allKeys]);
[bundlesplist setObject:valididentifiers forKey:@"Bundles"];
[bundlesplist writeToFile:@"/Library/MobileSubstrate/DynamicLibraries/test.plist" atomically:NO];
我不确定我是以错误的方式来做这件事,还是只是愚蠢但是任何帮助都会非常感激。 非常感谢汤姆
答案 0 :(得分:0)
理想情况下,您应该能够使用以下方式设置值:
[bundlesplist setObject:valididentifiers forKeyPath:@"Filter.Bundles"];
但是,Filter
字典可能是不可变的。
因此,我建议你这样做:
NSMutableDictionary *filter = [bundlesplist[@"Filter"] mutableCopy];
filter[@"Bundles"] = valididentifiers;
bundlesplist[@"Filter"] = filter;