删除 UserDefault 中的套件

Posted

技术标签:

【中文标题】删除 UserDefault 中的套件【英文标题】:Removing Suite in UserDefault 【发布时间】:2019-06-10 09:38:29 【问题描述】:
var sharedPreference    : UserDefaults  = UserDefaults.init(suiteName: "userKeyValue")!

我正在创建这样的 UserDefault 实例,很可能是在设备中创建一个名称为 userKeyValue 的空间,并将所有键值对保留在其中。

现在我想将内容迁移到不同的UserDefault 实例

var oldSharedPreference : UserDefaults? = UserDefaults(suiteName: "userKeyValue")
if (oldSharedPreference != nil) 
  print("Previous data found")
  for (key, value) in oldSharedPreference!.dictionaryRepresentation() 
    sharedPreference.set(value, forKey: key)
  
  sharedPreference.synchronize()
  oldSharedPreference!.removeSuite(named: "userKeyValue")
  oldSharedPreference!.synchronize()
 

我一个接一个地安装了该应用程序很多次,但每次我都收到日志Previous data found。我不知道我这样做是否正确。

我只是希望一旦这段代码运行,UserDefaults 的实例就不再存在 userKeyValue,但这不会发生。

更新:: 创建实例时,我在 UserDefault 中获取此内容

["AKLastCheckInSuccessDate": 2019-06-03 09:06:11 +0000, "NSLanguages": <__NSArrayI 0x2820289c0>(
en-IN,
en
)
, "com.apple.content-rating.TVShowRating": 1000, "com.apple.content-rating.ExplicitBooksAllowed": 1, "AppleLanguagesDidMigrate": 16E227, "INNextHearbeatDate": 581574895.850746, "AppleLocale": en_IN, "NSInterfaceStyle": macintosh, "AKLastCheckInAttemptDate": 2019-06-09 20:42:49 +0000, "AddingEmojiKeybordHandled": 1, "com.apple.content-rating.MovieRating": 1000, "AKLastIDMSEnvironment": 0, "AKLastEmailListRequestDateKey": 2019-06-03 09:04:39 +0000, "AppleLanguages": <__NSCFArray 0x283579f80>(
en-IN
)
, "com.apple.content-rating.AppRating": 1000, "com.apple.content-rating.ExplicitMusicPodcastsAllowed": 0, "PKKeychainVersionKey": 4, "AppleKeyboards": <__NSCFArray 0x28357a080>(
en_IN,
emoji
)
, "AppleITunesStoreItemKinds": <__NSCFArray 0x281531080>(
itunes-u,
movie,
ringtone,
album,
software-update,
booklet,
tone,
music-video,
song,
podcast,
software,
podcast-episode,
wemix,
eBook,

artist,
mix,
document
)
, "INNextFreshmintRefreshDateKey": 581904664.355094, "ApplePasscodeKeyboards": <__NSCFArray 0x28357a0c0>(
en_IN@sw=QWERTY;hw=Automatic,
emoji@sw=Emoji
)
, "AppleKeyboardsExpanded": 1]

【问题讨论】:

试试 if (oldSharedPreference?.dictionaryRepresentation().count > 0) 它显示的大量垃圾数据 Apple 存储到 ios 设备中的值很少,当您尝试打印它们时也会显示这些值。 UserDefaults(suiteName: "userKeyValue")初始化 NSUserDefault 的一个实例。它永远不会是nil 并且永远是新的。所以if (oldSharedPreference != nil)always true 条件(如果“userKeyValue”是这样的静态字符串) 我们如何访问已经创建的用户默认值? 【参考方案1】:

您是否尝试删除整个域?

UserDefaults.standard.removePersistentDomain(forName: "userKeyValue")
UserDefaults.standard.synchronize()

来自苹果documentation

调用此方法等效于使用 init(suiteName:) 传递 domainName 初始化用户默认对象,并在其每个键上调用 removeObject(forKey:) 方法。

【讨论】:

【参考方案2】:

尝试下面提到的删除 UserDefaults 实例的代码

UserDefaults.standard.removeObject(forKey: "userKeyValue")

【讨论】:

以上是关于删除 UserDefault 中的套件的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发小技巧--userdefault存储复杂数据(image为例)

cocos2dx中的游戏储存-UserDefault

Xcode 中的 UserDefault 不保存文本

如何从 Swift 类中检索目标 C 类中的 Userdefault?

2016-02-22 类似qq对话的文字嵌入在图片中

Redis: userd_memory使用超出maxmemory