IOS 10中的UserDefaults有时显示旧值

时间:2017-02-11 10:05:11

标签: ios swift nsuserdefaults

我正在我的应用程序上测试一些内容,我将当前使用的主题保存为字符串:“Light”与“Dark”。

我刚才意识到,在某些时候,当我不断地从浅到深切换(读取和写入字符串到<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_focusable" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusableInTouchMode="true" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <EditText android:id="@+id/edt_test" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Hello" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" /> <ImageView android:layout_width="match_parent" android:layout_height="150dp" android:background="#ffffff" android:onClick="onClickGetSignature" android:src="@drawable/powered_by_google_light" /> <ImageView android:layout_width="match_parent" android:layout_height="150dp" android:background="#ffffff" android:onClick="onClickGetSignature" android:src="@drawable/powered_by_google_light" /> <ImageView android:id="@+id/result" android:layout_width="match_parent" android:layout_height="150dp" android:background="#ffffff" android:onClick="onClickGetSignature" android:src="@drawable/powered_by_google_light" /> </LinearLayout> </ScrollView> )时,我有时会得到旧值:

UserDefaults

我已将日志添加到我读取和写入值的位置并正确执行。这是我测试的方式:

Light -> Dark -> Light -> Dark -> Light -> Light

我看到其他一些帖子表示 1. Start app 2. Change theme (save string to UserDefaults) 3. Stop app 4. Start app (read string from UserDefaults) 中的UserDefaults存在问题,解决方法是重启设备或mac。

我明白了,但这是不是意味着问题也会出现在用户设备上? 有人遇到过这种问题吗?任何解决方案?

我正在使用XOS 8.2.1和IOS 10,Swift 3.我正在测试我的真实设备,而不是模拟器。

1 个答案:

答案 0 :(得分:3)

您确定在保存数据后致电[[NSUserDefaults standardUserDefaults] synchronize];吗?