我在Xcode 9.2,Objective-c。
我已经注册了像Apple推荐的registerDefaults的默认值。一切正常。
想想这个简单的场景:我的默认值中有一个键/值对,其值是NSMutableDictionary。
现在,我想在应用更新中为特定字典添加一些键/值对。因为密钥已经存在于我的默认值中,值(字典)将不会被registerDefaults方法中的新值覆盖。
当然我可以从默认值中读取字典,添加我的新对并将其写回。但我想知道是否有更优雅的方式或更新的最佳做法?
答案 0 :(得分:0)
您应该只在应用启动时注册默认值一次。其他一切都应该是对UserDefaults
的操纵。因此,访问数组,附加值并将其重新设置为默认值就可以了。
答案 1 :(得分:0)
我认为您应该使用静默推送通知进行旧数据更新。
注意:
它们可用于在不通知用户的情况下通知新内容的应用。应用程序将在后台和应用程序中被唤醒,而不是显示通知警报:didReceiveRemoteNotification:fetchCompletionHandler:将被调用。然后,您有机会以透明方式处理用户的任何信息:
下载一些内容 同步一些元素, 当用户打开它时,直接在应用程序内通知用户 请注意,您的时间限制为30秒。
配置静默通知
要支持静默远程通知,请添加远程通知 值为Info.plist文件中的UIBackgroundModes数组。学习 有关此数组的更多信息,请参阅UIBackgroundModes。
class Input extends Component {
state = {
tagged: false,
message: '',
input1: '',
input2: '',
}
handleClick(e) {
// access input values in the state
console.log(this.state) // {tagged: true, input1: 'text', input2: 'text2'}
this.setState({tagged: true});
e.preventDefault();
console.log('The link was clicked.');
}
handleInputChange = (e, name) => {
this.setState({
[name]: e.target.value
})
}
render() {
return (
<div id="id" style={divStyle}>
<p> hello </p>
<input
style = {textStyle}
placeholder="user@email.com"
type="text"
onChange={(e) => this.handleInputChange(e, 'input1')}
>
</input>
<input
style = {textStyle}
placeholder="tag"
type="text"
onChange={(e) => this.handleInputChange(e, 'input2')}
>
</input>
<button
onClick={(e) => this.handleClick(e)}
style={buttonStyle}>
{this.state.tagged ? 'Tagged' : 'Tag ' }
</button>
<p>
{this.state.tagged ? 'Clicked' : 'Still' }
</p>
</div>
)
}
}
配置无声通知
aps词典还可以包含content-available属性。 值为1的content-available属性允许远程 通知充当无声通知。当一个无声的通知 到了,iOS在后台唤醒你的应用程序,以便你可以得到 来自服务器的新数据或进行后台信息处理。 不会告知用户有关新信息或已更改的信息 从一个无声的通知,但他们可以找到下一个 他们打开你的应用程序的时间。
对于无声通知,请注意确保没有警报, aps字典中的声音或徽章有效负载。如果你不遵循 在此指南中,可能是错误配置的通知 限制而不是在后台传递给应用程序,而是 静默显示给用户
希望这对你有所帮助。如果您需要任何帮助,可以询问。