在OS X Yosemite(10.10)上,有没有办法删除服务的启用/禁用覆盖设置?
例如,要永久禁用root用户不存在的服务"test",请执行以下操作:
sudo launchctl disable user/0/test
Run Code Online (Sandbox Code Playgroud)
检查它是否已添加到禁用列表中:
sudo launchctl print-disabled user/0
Run Code Online (Sandbox Code Playgroud)
结果:
disabled services = {
"test" => true
}
login item associations = {
}
Run Code Online (Sandbox Code Playgroud)
现在,如何从禁用的服务列表中删除"test"?
(我知道我可以启用它,但我只想完全删除该条目.)
注意:
如果我重新启动计算机,我会看到"test"覆盖已添加到launchd disabled文件中:
sudo cat /var/db/com.apple.xpc.launchd/disabled.0.plist
Run Code Online (Sandbox Code Playgroud)
结果:
<?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>test</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
我试过运行此命令手动将其从.plist文件中删除:
sudo /usr/libexec/Plistbuddy /var/db/com.apple.xpc.launchd/disabled.0.plist -c Delete:test
Run Code Online (Sandbox Code Playgroud)
这会将其从文件中删除,但是当我重新启动计算机时它会再次出现.有任何想法吗?
对于我的核心数据NSManagedObject,我想确保任何NSString属性只包含已经修剪过的空格的字符串.
我知道我可以通过覆盖每个setter方法来实现这一点,如下所示:
- (void)setSomeProperty:(NSString *)someProperty
{
someProperty = [someProperty stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ((!someProperty && !self.someProperty) || [someProperty isEqualToString:self.someProperty]) return;
[self willChangeValueForKey:@"someProperty"];
[self setPrimitiveValue:someProperty forKey:@"someProperty"];
[self didChangeValueForKey:@"someProperty"];
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎需要编写很多代码,特别是因为我的托管对象可能具有相当多的NSString属性.
有没有更简单的方法?