问题描述
我正在编写一个实用程序,该实用程序可以为我配置一些UserDefaults值,例如根据个人喜好初始化新Mac。
它从输入文件中读取一组配置。然后,它使用CFPreferencesSetValue
API将指定的首选项应用于各种应用程序。我用它代替NSUserDefaults
,因为后者不允许您写到NSGlobalDomain
(/Library/Preferences/.GlobalPreferences.plist
)。
它运作良好,但是这里有一个变化:我希望能够检测出哪些应用程序的首选项值实际发生了更改,以及哪些应用程序已经具有所需的首选项。这使我仅在必要时才自动重新启动“脏”应用程序,例如Finder,Dock等。
我通过这样做来实现:
- 读取现有首选项的值
- 将刚读取的值与从配置文件读取的所需值进行比较
- 注意到哪些域的值需要更改
- 应用首选项更改
- 重新启动与脏域相对应的应用程序。
问题是我有最后写赢的情况。没有任何事务/锁定机制,某人完全有可能改变我的偏好,而我会覆盖他们的改变。如果我仅更改自己的应用程序的首选项,就不会有问题,但是鉴于我将更改NSGlobalDomain
(“流量”相对较高),这是等待中的错误。 / p>
是否有一种方法可以安全地进行此更改,而不会冒最后写赢者破坏其他更改的风险?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)