我正在+[NSUserDefaults standardUserDefaults]
用来存储应用程序设置.这包含大约十几个字符串值.是否可以永久删除这些值而不是仅将它们设置为默认值?
我的iOS应用程序中有一个登录屏幕.NSUserDefaults
当您再次进入应用程序时,用户名和密码将保存在再次加载到登录屏幕中(当然,这NSUserDefaults
是永久性的).
现在,用户可以禁用用户名/密码保存功能.
那么NSUserDefaults
将被清除.
但在我的应用程序中,我需要这个用户名/密码用于用户的数据库查询.那么:除了存储数据的位置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) 有没有办法直接查看已保存的内容NSUserDefaults
?我想看看我的数据是否正确保存.
我正在开发一个小型iPhone应用程序,我正在使用NSUserDefaults
我的数据持久性.它只需跟踪一些事情,例如一些名字和一些数字,所以我想我也可以保持简单.
我找到了这个页面作为参考,但我不认为它可以回答我的问题.基本上,我希望能够检查一个值(或一个键)是否已经存在NSUserDefaults
,然后相应地做一些事情.
一些例子:应用程序启动,如果这是第一次启动它会输出一个表示欢迎的警报.要判断这是否是第一次打开,它会读取UserDefaults
并检查.
示例2:它表示"Hello [Name]",其中Name是您输入的内容.如果你打开了应用程序并且没有名字,那就应该说"Hello World".我需要检查您是否已经输入了名称并采取相应措施.该名称将存储在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)
在应用程序的某个时刻,NSString
在BC_PersonClass
设置中,我有一个DataSave
类,我认为正在处理我的属性编码BC_PersonClass
.这是我在DataSave
课堂上使用的代码:
- (void)savePersonArrayData:(BC_Person *)personObject
{
// NSLog(@"name of the person %@", personObject.personsName); …
Run Code Online (Sandbox Code Playgroud) 我在NSUserDefaults中存储了两种存储NSDate的方法.
// 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)
// 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具有"亚秒精度".
无论我选择何种方法,都必须:
精确到一秒钟之内.
可读且可靠.
选项2是不准确的,因为我做错了什么?
你会使用这两个选项中的哪一个?
还有其他选择我不知道吗?
谢谢!
我想保存一个NSMutableDictionary
对象NSUserDefaults
.键类型NSMutableDictionary
是NSString
,值类型是NSArray
,它包含实现的对象列表NSCoding
.每份文件,NSString
和NSArray
两者都符合NSCoding
.
我收到此错误:
[NSUserDefaults setObject:forKey:]:尝试插入类NSCFDictionary的非属性值....
我目前正在开发一个在Swift中开发的iOS应用程序,我需要在设备上存储一些用户创建的内容,但我似乎无法找到一种简单快捷的方式来存储/接收设备上的用户内容.
有人可以解释如何存储和访问本地存储?
我们的想法是在用户执行操作时存储数据,并在应用启动时接收数据.
nsuserdefaults ×10
ios ×9
objective-c ×6
cocoa-touch ×3
encoding ×2
iphone ×2
cocoa ×1
datetime ×1
keychain ×1
macos ×1
nscoding ×1
nsdate ×1
swift ×1