NSUserDefault更新最佳实践

时间:2018-01-10 22:41:53

标签: objective-c nsuserdefaults

我在Xcode 9.2,Objective-c。

我已经注册了像Apple推荐的registerDefaults的默认值。一切正常。

想想这个简单的场景:我的默认值中有一个键/值对,其值是NSMutableDictionary。

现在,我想在应用更新中为特定字典添加一些键/值对。因为密钥已经存在于我的默认值中,值(字典)将不会被registerDefaults方法中的新值覆盖。

当然我可以从默认值中读取字典,添加我的新对并将其写回。但我想知道是否有更优雅的方式或更新的最佳做法?

2 个答案:

答案 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字典中的声音或徽章有效负载。如果你不遵循   在此指南中,可能是错误配置的通知   限制而不是在后台传递给应用程序,而是   静默显示给用户

希望这对你有所帮助。如果您需要任何帮助,可以询问。