标签: nsuserdefaults

NSUserDefaults,不可靠?

我正在开发一个项目,通过构建一个与 PHP/MySQL api 对话的小型应用程序来学习 obj-c。

每次用户执行某些操作时,都会为此用户设置一个新的身份验证密钥并将其发送到客户端。客户端收到此值并应将其设置为 NSUserDefaults。这是为了不让用户在程序每次启动时都登录;如果该密钥存在,它将尝试使用该密钥进行身份验证,然后自动登录。

有时这有效......我有两个功能,一个用于接收,一个用于设置。它们看起来像这样:

//GET
-(NSString*)GetValue:(NSString *)Name
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *get = [prefs stringForKey:Name];

    if(get)
        return get;
    else
        return FALSE;
}
//SET
-(void)SetValue:(NSString*)Name:(NSString*)Value
{
    //Add new...    
    [[NSUserDefaults standardUserDefaults] setObject:Value forKey:Name];    
}
Run Code Online (Sandbox Code Playgroud)

这几乎有效。
问题是这样的:

1)未设置auth-key值(在NSUserDefaults中)
2)我尝试登录用户,值设置(如“aaaaaaaaaaaaaaaaa”),一切都很好。我重新启动程序,它获取这个存储的值,尝试登录,从 PHP 返回一个积极的结果以及一个新的密钥,当答案返回时必须设置该密钥......就像这样......

if(NewKey.length > 0)
{
    NSLog(@"TRY SET KEY: %@", NewKey);
    [self SetValue:@"auth_key":NewKey];
    NSLog(@"TRY GET KEY: %@", [self GetValue:@"auth_key"]);
}
Run Code Online (Sandbox Code Playgroud)

3)上面的NSLog显示“TRY SET KEY: bbbbbbbbbbbbbbbb”和“TRY GET KEY: bbbbbbbbbbbbbbbb”。看起来很完美!
4)好吧,我杀掉程序并重试,现在它应该已经存储了“bbb ...”,对吧?错误的!当我现在 NSLogs 这个值时,它仍然是“aaa...”
5)我再次尝试登录,NSLog 说“尝试设置密钥:ccc...”和“尝试获取密钥:ccc...” - 它说这个值被存储。但它不是...
6) 我杀死程序,重新启动并得到“aaa...”。 …

objective-c nsuserdefaults

0
推荐指数
1
解决办法
301
查看次数

访问 NSUserDefaults 中存储的数据是一个昂贵的操作吗?

我想知道访问存储在NSUserDefaults. 这是否比访问一次并将其存储在属性中,然后通过从属性获取它而不是再次获取它来在将来使用它要慢得多NSUserDefaults?或者差异非常微不足道?我知道文档状态NSUserDefaults已缓存。

答案可能取决于您计划获取它的频率。假设每分钟需要 20 次。我不会以编程方式更改它,只会获取当前值。

我很好奇,因为总是获取它的好处之一是你可以保证那是当前值。如果您获取一次并存储它,您需要监听更改,NSUserDefaults然后通过获取它来更新存储的值。

cocoa-touch nsuserdefaults ios

0
推荐指数
1
解决办法
988
查看次数

Swift Compiler Warning : Result of call to 'save(defaults:)' is unused

So my table view is not loading anything and I think it's because of this warning that I get. It saids the save function is not being used so how can it load something that is not saved. What I am saving is the indexPath and Section of the row that the user selected via a button action in the row.

Warning:

Result of call to 'save(defaults:)' is unused

Code:

func saveSorting(_ dataIdBlock: (Any) -> String) {

    guard let items …
Run Code Online (Sandbox Code Playgroud)

warnings nsuserdefaults nscoding ios swift

0
推荐指数
1
解决办法
4259
查看次数

将对象存储在用户默认值 swift 中

我是 swift 的新手,并试图找出存储用户默认值的最佳方式。这是我的应用程序的 3 个初始 VC 类,我将数据从登录视图传递到开始您的计划视图,再到用户信息(配置文件视图)——这是我需要为用户存储默认值的地方。我的问题是 - 存储的唯一用户默认值是“姓名”和“月薪”似乎也有效。但是“每日预算默认值”和“每日储蓄默认值”(双打)似乎没有存储并出现在第三个屏幕(用户配置文件)上。我没有得到正确的参考。

第一段代码来自登机视图控制器,我在那里收集他们的信息 - 为了简短起见,我只显示了 calculateData IBAction。截至目前 - 这是我试图获取他们的用户默认值的地方。

信息的第二个 VC是在登机后直接查看的视图,用户可以在其中查看他们的信息 - 一旦他们从这个 VC 开始 - 我创建一个新的用户对象(我应该只创建一个新用户对象的数组并将其存储在 NSUserDefaults 下这里?)

第三个 VC - 这是实际的用户配置文件,我需要在其中显示所有用户默认值。我将把它设置为初始视图控制器并在应用程序委托中设置,如果用户之前已经完成了登录屏幕,则首先加载此页面。

请并感谢您的任何帮助!

 import UIKit

 class ViewController: UIViewController, UITextFieldDelegate{

   @IBAction func calculateDataButtonPressed(_ sender: UIButton) {

    customerName = nameTextField.text!


    if let payTotal = Double(monthlyAmountTextField.text!){
        monthlyEarning = payTotal
    }

    if let savingsNumber = Double(desiredSavingsTextField.text!){
        desiredSavingsAmount = savingsNumber

    }

    else {
        displayLabel.text = "Enter input as so: 1299.39"

    }


    budgetForEachDay = ((monthlyEarning - …
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults ios swift

0
推荐指数
1
解决办法
3044
查看次数

当无法访问时,UserDefaults 是否返回默认值或 nil?

我正在从事一个 iOS 项目,该项目UserDefaults在启用文件保护时面临访问值的问题。Apple 社区中有几篇关于UserDefaults无法访问问题的帖子。一些讨论是,

  1. UserDefault 获取 NULL
  2. NSUserDefault 丢失

这对我来说真的很令人沮丧,因为我的应用程序用于检查键FirstTimeAppLaunched的布尔值并基于它db encryption password为我的数据库重新创建的值。由于上述问题,一旦UserDefault无法访问,我的应用程序就会重新创建新密码,并最终丢失用户以前使用不同密码使用的所有数据。

现在我想使用整数状态而不是布尔值,因此我需要使用,

UserDefaults.standard.register(["FirstTimeAppLaunched", 0]);
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时。第一次启动后我将其设置为 1,

UserDefaults.standard.set(1, forKey: "FirstTimeAppLaunched");
Run Code Online (Sandbox Code Playgroud)

在这种情况下我需要确认,

如果UserDefault由于上述问题而无法访问标准,是否可以保证 key 的返回值FirstTimeAppLaunchedNULL我使用方法注册的默认值UserDefaults.standard.register

data-protection nsuserdefaults ios ios13

0
推荐指数
1
解决办法
4913
查看次数

NSUserDefaults如果数据等于NSLog

我创建了一个简单的应用程序,当你点击一个按钮,它保存第一次点击与1第二个同时1.所以,我试图检查第一次点击是否等于1然后NSLog它没有奏效.

这是我的代码:

-(IBAction)add:(id)sender
{
//Once the user click on the button it adds 1
static int num = 0;
num+=1;

//Save the number for key "saved and the number" ex: if number is 1 so for key is "saved 1"
NSString *dataa = [NSString stringWithFormat:@"%i", num];
NSString *fkey = [NSString stringWithFormat:@"saved %i", num];
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setObject:dataa forKey:fkey];
[def synchronize];
}

-(IBAction)load:(id)sender
{
//load the data forkey "saved 1" wich will …
Run Code Online (Sandbox Code Playgroud)

objective-c nsuserdefaults ios

-1
推荐指数
1
解决办法
89
查看次数

从NSUserDefaults获取NSMutableArray并添加元素

我有一个按钮,允许用户将帖子标记为收藏.
这是我的代码:

+(NSMutableArray*) getFavoritePostsArray {
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    NSMutableArray *tempArray = [userDefault mutableArrayValueForKey:@"favoritePostArray"];

    if ([tempArray count] == 0) {
        return [[NSMutableArray alloc] init];
    }
    else {
        return tempArray;
    }
}
+(BOOL)addFavoritePost:(CostumSDPost *)post {
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

    NSMutableArray *tempArray = [GlobalFunctionAndVariable getFavoritePostsArray];
    NSDictionary *tempPost = @{
                               @"title" : post.title,
                               @"ID": post.ID,
                               @"imageURL": post.imageURl,
                               @"viewsNumber" : post.viewsNumber,
                               @"content" : post.content,
                               @"date": post.date,
                               @"authorName": post.authorName,
                               @"categoryList": post.categoryList,
                               @"commentsArra": post.commentsArray,
                               @"commentsStatus": post.commentsStatus,
                               @"commentsNumber":[[NSString alloc] initWithFormat:@"%lu", post.commentsNumber],
                               };


    [tempArray addObject:tempPost];


    //[userDefault …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsuserdefaults ios

-1
推荐指数
1
解决办法
92
查看次数

检查NSUserDefaults中是否存在密钥

我正在尝试检查NSUserDefault中是否存在特定密钥.问题是它不断返回错误.怎么回复lldb错误?

if let data = NSUserDefaults.standardUserDefaults().objectForKey("teams") as? NSData {

}
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults ios swift

-1
推荐指数
1
解决办法
3779
查看次数

DataPicker格式错误

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm "

let selectedDate = dateFormatter.string(from: sender.date)

UserDefaults.standard.set(selectedDate, forKey: "date")
print(selectedDate)

\\method to reload the selected time inside the viewdidLoad func

let selectedDate = UserDefaults.standard.object(forKey: "date")
example.setDate(selectedDate as! Date ?? Date(), animated: false)
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,它会返回此错误

无法将类型'__NSCFString'(0x108e8b4f0)的值转换为'NSDate'(0x108e8c0d0).

我转换为HH:mm因为我想只记录这种格式的时间,但我不知道我将如何处理它

nsuserdefaults datapicker swift

-1
推荐指数
1
解决办法
43
查看次数

NSUserDefaults setObject在Thread中崩溃

我在后台做一些事情.我也尝试将对象写入标准用户默认值.从iOS 9开始,它就崩溃了.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// calling some methods in the background
// also save a value to the user defaults
NSDate *aDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:aDate forKey:@"date"]; // <-- crash: EXC_BAD_ACCESS

});
Run Code Online (Sandbox Code Playgroud)

我找不到问题.aDate不是零.我也尝试在主线程(来自后台线程)上执行setObject:但结果相同.

崩溃是零星的!我做错了什么?

这是堆栈跟踪:

崩溃:com.apple.root.background-qos EXC_BAD_ACCESS KERN_INVALID_ADDRESS位于0x0000000000000010

线程:崩溃:com.apple.root.background-qos 0 libobjc.A.dylib
0x0000000199b0dbd0 objc_msgSend + 16 1基础
0x0000000185ea1eb4 - [NSObject(NSKeyValueObserverNotification)willChangeValueForKey:] + 324 2 CoreFoundation
0x0000000185090994 _CFPreferencesSetValueWithContainer + 168 3 Foundation 0x0000000185eb9138 - [NSUserDefaults( NSUserDefaults)setObject:forKey:] + 56 4 AIR 0x00000001000f201c - [ServerSyncAgent syncUnsyncedEntities](ServerSyncAgent.m:212)5 libdispatch.dylib
0x000000019a2e97b0 _dispatch_call_block_and_release + 24 6 …

crash nsuserdefaults ios ios9

-2
推荐指数
1
解决办法
1792
查看次数