Amo*_*kar 24 objective-c nsuserdefaults ios
我是iOS开发和移动应用程序开发的新手,我对使用的Objective C和MVC模式有很好的了解,我从未做过任何Mac开发.
我很难理解是什么NSUserDefaults?
我们已经有类似PList的东西,它将数据存储为XML,我们拥有SQLite轻量级的DB用于此类设备.
那我们为什么要这样呢?
它是否是我们应用程序的替代简单键值存储,就像我们在云上有不同类型的存储一样,如RDBMS和基于键值的NoSQL商店等?
对于NSUserDefaults,Apple文档说: -
"应用程序通过将值分配给用户默认数据库中的一组参数来记录此类首选项"
用户的默认数据库是什么意思?
我的猜测是,就像在任何多用户操作系统中一样,我们有各种用户帐户,并且在Mac中也是如此,我们可能有多个用户,每个用户都有一个数据库,应用程序将为该用户加载已保存的首选项.
那么像Mac OS X一样,iOS也有多个用户,并且根据登录的人NSUserDefaults选择他/她的偏好?
请告诉我,如果我错了.
dav*_*den 15
还有一件事尚未提及:NSUserDefaults支持所有基本标量(float,int,BOOL)类型,以及plist兼容类型:NSData,NSString,NSNumber,NSDate,NSArray和NSDictionary.(您提到了plists作为替代方案 - NSUserDefaults只是应用程序的Preferences文件夹中标准plist文件的前端.)这使得只需几行代码就可以轻松地为应用程序状态创建持久存储.更好的是,如果在模型对象上实现NSCoding,则可以将它们存档到NSData中并将它们放在NSUserDefaults中:
NSData* data = [NSKeyedArchiver archivedDataWithRootObject:arrayOfModelObjects];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:kDefaultsKeyModelObjects];
Run Code Online (Sandbox Code Playgroud)
并恢复您的应用数据非常简单
- (void)viewDidLoad
{
NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultsKeyModelObjects];
arrayOfModelObjects = [[NSKeyedUnarchiver unarchiveRootObject:data] retain];
// error checking, tell UI to load the new values, etc...
}
Run Code Online (Sandbox Code Playgroud)
(kDefaultsKeyModelObjects是你在某处定义的字符串常量.总是把你的NSUserDefaults键放在一个地方!在键名中输入错误可能需要几个小时来调试.:)
如果您使用例如SQLite来存储应用程序数据,则必须编写大量代码以将模型数据移入和移出数据库.如果您处理大量数据,需要高效搜索等,这是有道理的.但是,如果它是网络应用程序中的服务器列表,则将它们放入NSUserDefaults会更容易,更清晰.
最后一件事:NSUserDefaults非常适合原型设计.即使你最终知道你最需要一个SQLite存储,你也可以开始使用NSUserDefaults作为一个快速简单的持久存储,并在编写一堆数据库代码之前让你的UI工作并充实你的数据模型.
那么像Mac OS X一样,iOS也有多个用户,并且根据NSUserDefaults中记录的选择他/她的偏好?
不,在iOS上,默认的plist位于应用程序的Library/Preferences文件夹中,而不是在OS X上的用户特定文件夹中.我无法想象iOS会有多次登录,但你永远不会知道.如果是这样,他们必须为不同的用户制作单独的默认值.
Vik*_*ica 14
NSUserDefaults用于保存App依赖的小部分数据以便正确运行,而其他方法可以存储应用程序使用的更大量数据.
NSUserDefaults令人难以置信,因为您不必担心文件,实体,提取物...... 这一切都在一条线上完成.
它最初用于存储设置,但如果关于SO的问题是任何事情,它似乎确实(ab)用于许多其他事情.它的"要点"是它为各种数据类型提供单行数据持久性和检索方法.
在iOS上没有多用户配置(但是?)(你有没有必须登录到你的iPhone?)是内置于NSUserDefaults的,但是因为OS X和iOS建立在同一个基础上,所以同一个类是用于两种操作系统.
| 归档时间: |
|
| 查看次数: |
17998 次 |
| 最近记录: |