轻松查看已保存的NSUserDefaults?

Eth*_*han 221 macos objective-c nsuserdefaults ios

有没有办法直接查看已保存的内容NSUserDefaults?我想看看我的数据是否正确保存.

小智 351

您可以将所有当前NSUserDefaults打印到日志中:

只是键:

NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Run Code Online (Sandbox Code Playgroud)

键和值:

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Run Code Online (Sandbox Code Playgroud)

  • Apple可以为XCode制作一个简单的查看器.像plist viewer一样.但不,他们不想让事情变得简单. (2认同)

Red*_*ing 159

如果你去,你可以在模拟器中找到你的应用程序的pList文件:

/ users/您的用户名/Library/Application Support/iPhone Simulator/<Sim Version>/Applications

该目录有一堆GUID命名目录.如果您正在开发一些应用程序,那么会有一些应用程序.所以你需要找到你的app二进制文件:

find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Run Code Online (Sandbox Code Playgroud)

然后转到GUID目录中的Library/Preferences目录.所以:

cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
Run Code Online (Sandbox Code Playgroud)

你应该找到一个看起来像这样的文件:

<Bundle Identifier>.foo.pList
Run Code Online (Sandbox Code Playgroud)

在pList编辑器中打开它并浏览持久值到您心中的内容.

  • 我发现在XCode的更高版本中已经改变了.您现在可以在当前ios版本号下的目录中找到它而不是用户 - 例如/ users /您的用户名/库/应用程序支持/ iPhone模拟器/ 4.3 /应用程序 (12认同)
  • 路径已更改为:〜/ Library/Developer/CoreSimulator/Devices (8认同)

foo*_*s27 76

在Swift中我们可以使用以下内容: -

Swift 3.x和4.x

获取所有键和值:

for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
    print("\(key) = \(value) \n")
}
Run Code Online (Sandbox Code Playgroud)

用于检索用户默认值的完整字典表示:

print(Array(UserDefaults.standard.dictionaryRepresentation()))
Run Code Online (Sandbox Code Playgroud)

要检索密钥:

// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
Run Code Online (Sandbox Code Playgroud)

要检索值:

我们也可以在这里使用dump,但是这将返回values数组中每个元素的完整继承层次结构.如果需要有关对象的更多信息,则使用dump,否则继续使用普通的print语句.

// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
Run Code Online (Sandbox Code Playgroud)

Swift 2.x

用于检索用户默认值的完整字典表示:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())
Run Code Online (Sandbox Code Playgroud)

要检索密钥:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)
Run Code Online (Sandbox Code Playgroud)

要检索值:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
Run Code Online (Sandbox Code Playgroud)


Mor*_*ion 39

您可以检查返回的数组中每个键的值

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
Run Code Online (Sandbox Code Playgroud)

  • 这也在调试器中使用此命令:(lldb)"po [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]" (2认同)

Nie*_*tle 21

在模拟器中运行时,我有时会使用以下代码段打印出我的NSUserDefaults文件的位置

NSArray *path = NSSearchPathForDirectoriesInDomains(
   NSLibraryDirectory, NSUserDomainMask, YES);
NSString *folder = [path objectAtIndex:0];
NSLog(@"Your NSUserDefaults are stored in this folder: %@/Preferences", folder);

它会生成首选项文件夹的路径

您的NSUserDefaults存储在以下文件夹中:/ Users/castle/Library/Application Support/iPhone Simulator/User/Applications/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Library/Preferences

您的NSUserDefaults文件位于首选项文件夹中,并根据您的前缀和应用名称命名,例如

dk.castleandersen.dreamteam.grid.plist
Run Code Online (Sandbox Code Playgroud)

我希望实际设备也是如此.


Hlu*_*ung 8

很简单,因为 plist 文件名是<app-bundle-identifier>.plist,你可以使用find命令来找到它的路径。但是如果你搜索整台计算机需要很长时间,所以你必须选择一个好的范围,比如~/Library/Developer/CoreSimulatorXcode 6。

例子:

find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist

输出将是这样的......

/Users/hlung/Library/Developer/CoreSimulator/Devices/B61913F6-7D7C-4E45-AE2F-F45220A71823/data/Containers/Data/Application/E4CC51CF-11E5-4168-8A74-6BAE3B89998F/Library/Preferences/com.awesome.app.plist

从那里你可以使用open命令。或者,如果您使用iTerm2,只需在路径上单击命令即可打开它。


Rya*_*TCB 7

在Swift 4.0中

//func dictionaryRepresentation() -> [String : AnyObject]
Run Code Online (Sandbox Code Playgroud)

因为NSUserDefaults.standardUserDefaults()的dictionaryRepresentation返回[String:AnyObject]

我们把它变成了一个NSDictionary.然后通过在括号'()'中包围它将允许我们像在任何NSDictionary上一样调用.allKeys或.allValues

 print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Run Code Online (Sandbox Code Playgroud)


Mr.*_*ani 6

使用以下代码.

NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Run Code Online (Sandbox Code Playgroud)


wee*_*ius 5

对于OS X 应用程序,使用defaults命令行实用程序比查找应用程序的默认 plist 文件更简单。

姓名

 defaults -- access the Mac OS X user defaults system
Run Code Online (Sandbox Code Playgroud)

概要

 defaults [-currentHost | -host hostname] read [domain [key]]

 defaults [-currentHost | -host hostname] read-type domain key

 defaults [-currentHost | -host hostname] write domain { 'plist' | key 'value' }

 defaults [-currentHost | -host hostname] rename domain old_key new_key

 defaults [-currentHost | -host hostname] delete [domain [key]]

 defaults [-currentHost | -host hostname] { domains | find word | help }
Run Code Online (Sandbox Code Playgroud)

描述

defaults允许用户从命令行 shell 读取、写入和删除 Mac OS X 用户默认值。Mac OS X 应用程序和其他程序使用默认系统来记录用户首选项和其他在应用程序未运行时必须维护的信息(例如新文档的默认字体或信息面板的位置)。大部分信息都可以通过应用程序的首选项面板访问,但有些则不能,例如信息面板的位置。您可以通过以下方式访问此信息defaults

例子:

$ defaults read com.apple.Safari
{
    AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    DefaultBrowserPromptingState2 = 4;
    ...
Run Code Online (Sandbox Code Playgroud)