标签: nsuserdefaults

清除NSUserDefaults

我正在+[NSUserDefaults standardUserDefaults]用来存储应用程序设置.这包含大约十几个字符串值.是否可以永久删除这些值而不是仅将它们设置为默认值?

cocoa-touch objective-c nsuserdefaults ios

282
推荐指数
10
解决办法
12万
查看次数

iOS:如何在应用程序中存储用户名/密码?

我的iOS应用程序中有一个登录屏幕.NSUserDefaults当您再次进入应用程序时,用户名和密码将保存在再次加载到登录屏幕中(当然,这NSUserDefaults是永久性的).

现在,用户可以禁用用户名/密码保存功能.

那么NSUserDefaults将被清除.

但在我的应用程序中,我需要这个用户名/密码用于用户的数据库查询.那么:除了存储数据的位置NSUserDefaults?(当用户退出应用程序或注销时,可以/应该删除此位置).

keychain nsuserdefaults ios

274
推荐指数
6
解决办法
17万
查看次数

如何在NSUserDefaults中存储自定义对象

好吧,所以我一直在做一些戳,我意识到我的问题,但我不知道如何解决它.我已经创建了一个自定义类来保存一些数据.我为这个类制作了对象,我需要它们在会话之间持续.在我将所有信息都放入之前NSUserDefaults,但这不起作用.

-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<Player: 0x3b0cc90>' of class 'Player'.
Run Code Online (Sandbox Code Playgroud)

这是我将自定义类"Player"放入的错误消息NSUserDefaults.现在,我读过,显然NSUserDefaults只存储了某些类型的信息.那么我如何让我的对象进入NSUSerDefaults

我读到应该有一种方法来"编码"我的自定义对象,然后把它放进去,但我不知道如何实现它,帮助将不胜感激!谢谢!

****编辑****

好吧,所以我使用下面给出的代码(谢谢!),但我仍然有一些问题.基本上,代码崩溃了,我不知道为什么,因为它没有给出任何错误.也许我错过了一些基本的东西,我太累了,但我们会看到.这是我的Custom类"Player"的实现:

@interface Player : NSObject {
    NSString *name;
    NSNumber *life;
    //Log of player's life
}
//Getting functions, return the info
- (NSString *)name;
- (int)life;


- (id)init;

//These are the setters
- (void)setName:(NSString *)input; //string
- (void)setLife:(NSNumber *)input; //number    

@end
Run Code Online (Sandbox Code Playgroud)

实施档案:

#import "Player.h"
@implementation Player
- (id)init {
    if (self = [super init]) {
        [self setName:@"Player …
Run Code Online (Sandbox Code Playgroud)

iphone encoding objective-c nsuserdefaults ios

266
推荐指数
7
解决办法
13万
查看次数

轻松查看已保存的NSUserDefaults?

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

macos objective-c nsuserdefaults ios

221
推荐指数
9
解决办法
9万
查看次数

220
推荐指数
8
解决办法
17万
查看次数

NSUserDefaults - 如何判断密钥是否存在

我正在开发一个小型iPhone应用程序,我正在使用NSUserDefaults我的数据持久性.它只需跟踪一些事情,例如一些名字和一些数字,所以我想我也可以保持简单.

我找到了这个页面作为参考,但我不认为它可以回答我的问题.基本上,我希望能够检查一个值(或一个键)是否已经存在NSUserDefaults,然后相应地做一些事情.

一些例子:应用程序启动,如果这是第一次启动它会输出一个表示欢迎的警报.要判断这是否是第一次打开,它会读取UserDefaults并检查.

示例2:它表示"Hello [Name]",其中Name是您输入的内容.如果你打开了应用程序并且没有名字,那就应该说"Hello World".我需要检查您是否已经输入了名称并采取相应措施.该名称将存储在NSUserDefaults.

有些帮助吗?我真的很感激!

iphone objective-c nsuserdefaults ios

203
推荐指数
6
解决办法
10万
查看次数

尝试将非属性列表对象设置为NSUserDefaults

我以为我知道是什么导致了这个错误,但我似乎无法弄清楚我做错了什么.

这是我得到的完整错误消息:

Attempt to set a non-property-list object (
   "<BC_Person: 0x8f3c140>"
) as an NSUserDefaults value for key personDataArray

我有一个Person我认为符合NSCoding协议的类,我在这个类中有这两个方法:

- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:self.personsName forKey:@"BCPersonsName"];
    [coder encodeObject:self.personsBills forKey:@"BCPersonsBillsArray"];
}

- (id)initWithCoder:(NSCoder *)coder {
    self = [super init];
    if (self) {
        self.personsName = [coder decodeObjectForKey:@"BCPersonsName"];
        self.personsBills = [coder decodeObjectForKey:@"BCPersonsBillsArray"];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

在应用程序的某个时刻,NSStringBC_PersonClass设置中,我有一个DataSave类,我认为正在处理我的属性编码BC_PersonClass.这是我在DataSave课堂上使用的代码:

- (void)savePersonArrayData:(BC_Person *)personObject
{
   // NSLog(@"name of the person %@", personObject.personsName); …
Run Code Online (Sandbox Code Playgroud)

encoding objective-c nsuserdefaults ios

185
推荐指数
10
解决办法
14万
查看次数

在NSUserDefaults中存储NSDate的最佳方法是什么?

我在NSUserDefaults中存储了两种存储NSDate的方法.

选项1 - setObject:forKey:

// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];

// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Run Code Online (Sandbox Code Playgroud)

选项2 - timeIntervalSince1970

// Set
NSDate *myDate = [NSDate date];
NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"];

// Get
NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"];
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];
Run Code Online (Sandbox Code Playgroud)

优点和缺点

选项1

这似乎是紧凑和合乎逻辑的.但是,由于Date Formatter错误,我担心这会出错.

选项2

这似乎很笨拙.我也不确定它的准确性 - 在我做过的一次测试中,当我检索到日期时它已经超过了48秒,尽管Apple Docs说NSTimeInterval具有"亚秒精度".

要求

无论我选择何种方法,都必须:

  1. 精确到一秒钟之内.

  2. 可读且可靠.

我的问题

选项2是不准确的,因为我做错了什么?

你会使用这两个选项中的哪一个?

还有其他选择我不知道吗?

谢谢!

cocoa datetime nsdate nsuserdefaults nstimeinterval

172
推荐指数
3
解决办法
5万
查看次数

为什么NSUserDefaults无法在iOS中保存NSMutableDictionary?

我想保存一个NSMutableDictionary对象NSUserDefaults.键类型NSMutableDictionaryNSString,值类型是NSArray,它包含实现的对象列表NSCoding.每份文件,NSStringNSArray两者都符合NSCoding.

我收到此错误:

[NSUserDefaults setObject:forKey:]:尝试插入类NSCFDictionary的非属性值....

cocoa-touch objective-c nsuserdefaults nscoding ios

145
推荐指数
5
解决办法
8万
查看次数

如何在Swift应用程序中保存本地数据?

我目前正在开发一个在Swift中开发的iOS应用程序,我需要在设备上存储一些用户创建的内容,但我似乎无法找到一种简单快捷的方式来存储/接收设备上的用户内容.

有人可以解释如何存储和访问本地存储?

我们的想法是在用户执行操作时存储数据,并在应用启动时接收数据.

nsuserdefaults ios swift

132
推荐指数
8
解决办法
14万
查看次数