标签: userdefaults

如何将带有对象的数组保存到UserDefaults

My Object符合新的Swift 4 Codeable协议.如何保存这些对象的数组UserDefaults

struct MyObject: Codeable {
    var name: String
    var something: [String]
}

myObjectsArray = [MyObject]() // filled with objects
UserDefaults.standard.set(myObjectsArray, forKey: "user_filters")
Run Code Online (Sandbox Code Playgroud)

错误

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'尝试插入非属性列表对象

userdefaults swift4

4
推荐指数
1
解决办法
2985
查看次数

UserDefaults()和UserDefaults.standard之间的区别

Swift 3.0 UserDefaults()和之间是否存在差异UserDefaults.standard

nsuserdefaults swift swift3 userdefaults

3
推荐指数
1
解决办法
1587
查看次数

Objective-C 和 Swift 之间的 UserDefaults

只是想在这里格外小心......

如果我有一个应用程序在 UserDefaults 中保存了一个值,就像 Objective-C 中的这样:

NSString *newString = textField.text;
[[NSUserDefaults standardUserDefaults] setObject: newString forKey:@"textKey"];
Run Code Online (Sandbox Code Playgroud)

当我发布对现在用 Swift 编码的应用程序的更新时,这是否是检查该值是否存在的正确方法:

if (UserDefaults.standard.object(forKey: "textKey") as? String) != nil {
     print("There is a string")
} else {
     print("No string exists") 
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用 .string(forKey:) 和 .bool(forKey:) ,因为它们已经被引入了,但是它是最安全的,因为它被保存为一个对象,将其作为一个对象拉出来,然后用“as?细绳”?

同一问题的棘手版本:

NSDictionary 对象的 NSMutableArray 被保存为 UserDefaults 中的对象

if let oldData = UserDefaults.standard.object(forKey: "theData") as? [NSMutableDictionary] {

}
Run Code Online (Sandbox Code Playgroud)

NSDictionary 和 NSMutableDictionary 在这里可以互换吗?

谢谢!

string object objective-c swift userdefaults

3
推荐指数
1
解决办法
4979
查看次数

如何检查userDefault是否为空?

如果userDefault为空,我试图拒绝访问某个视图控制器,但是代码似乎无法正常工作。为了更清楚一点,我将收藏夹列表保存到userDefault中。这是我的代码:

 if UserDefaults.standard.array(forKey: "favorites") == nil {

        navigationController?.popToRootViewController(animated: true)
        return
    }
Run Code Online (Sandbox Code Playgroud)

错误是索引超出范围,这意味着整个块都将被忽略(此块运行后的代码,并且由于用户默认值为空,因此在尝试检索不存在的信息时会崩溃)。

有趣的是,代码在我第一次尝试进入viewController时起作用(它拒绝我访问)。但是,如果我最喜欢标记一个对象(保存到userDefault),然后取消收藏同一对象(userDefault变为空),然后输入viewController,程序将崩溃。

我试过了:

if let favExist = UserDefaults.standard.array(forKey: "favorites") {
        print("")
        print("FAV EXISTS")
        print("")

    }else {
        print("")
        print("NOPE")
        print("")
        navigationController?.popToRootViewController(animated: true)
        return
    }
Run Code Online (Sandbox Code Playgroud)

...同样的问题仍然存在。在print()中,日志告诉我“我喜欢的标记”,“然后不喜欢的标记”之后“收藏夹存在”,然后尝试访问页面(即使userDefault现在应该为空)。

我也尝试过其他线程的代码。从另一个线程解决我的问题的建议代码是:

let defaults = UserDefaults.standard

    if (!defaults.bool(forKey: "favorites")) {
        defaults.set(true, forKey: "favorites")
    }
Run Code Online (Sandbox Code Playgroud)

我不太确定如何实现它?我在哪里使用?它是做什么的?

知道有什么问题吗?

swift userdefaults

3
推荐指数
1
解决办法
4557
查看次数

使用 Swift 将可编码结构保存到 UserDefaults

我正在尝试对结构进行编码

struct Configuration : Encodable, Decodable {
    private enum CodingKeys : String, CodingKey {
        case title = "title"
        case contents = "contents"
    }
    var title : String?
    var contents: [[Int]]?
}
Run Code Online (Sandbox Code Playgroud)

转换成 JSON 以存储在 UserDefaults.standard 的本地键中。我有以下代码:

let jsonString = Configuration(title: nameField.text, contents: newContents)
let info = ["row" as String: jsonString as Configuration]
print("jsonString = \(jsonString)")
//trying to save object
let defaults = UserDefaults.standard
let recode = try! JSONEncoder().encode(jsonString)
defaults.set(recode, forKey: "simulationConfiguration")
//end of saving local
Run Code Online (Sandbox Code Playgroud)

打印返回:

jsonString = Configuration(title: Optional("config"), …
Run Code Online (Sandbox Code Playgroud)

swift userdefaults codable

3
推荐指数
1
解决办法
6557
查看次数

如何在默认值中保存当前用户位置?

我试图让用户选择保存他们的当前位置。我使用默认值来保存它,我发现了如何获取用户位置。但我不确定如何将这两项任务结合起来。所以这是我的问题:

如何让我的函数调用用户位置,以便保存?

@IBAction func addLocation(_ sender: Any) {

// CALL LOCATION MANAGER TO GET LOCATION IN LAT AND LONG    
    self.saveDefaults()

    }

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
    print("locations = \(locValue.latitude) \(locValue.longitude)")
}

func saveDefaults()
{
    UserDefaults.standard.set(self.pickers, forKey: "pickers")
    print("SAVED PICKERS: \(pickers)")

}
Run Code Online (Sandbox Code Playgroud)

这是我最近的尝试,但我不知道为什么我的 struct (lat: ,long:) 没有接受输入

@IBAction func addLocation(_ sender: Any) {

    var locations: [CLLocation]
    let manager: CLLocationManager

    let userLocation:CLLocation = locations[0] as CLLocation

    // Call stopUpdatingLocation() …
Run Code Online (Sandbox Code Playgroud)

core-location swift userdefaults

3
推荐指数
1
解决办法
864
查看次数

在 Swift 中访问 Flutter SharedPreferences

是否可以访问SharedPreferences从插件的 Swift 代码中访问的 Flutter 保存的内容?在Android中,我们必须FILE为模式SharedPreferences。Swift 4 中的任何类似功能?

sharedpreferences swift flutter userdefaults

3
推荐指数
2
解决办法
1140
查看次数

如何在 swift 5 中将 UIImage 保存到 UserDefaults

我正在尝试将用户图像保存到 userDefaults,但我总是收到错误“线程 1:“尝试插入关键已保存图像的非属性列表对象(函数)”这是我的代码

import UIKit

class productSelectionPage: UIViewController {
    @IBOutlet weak var productImageView: UIImageView!


    override func viewDidLoad() {
        super.viewDidLoad()

        // Save image
        let image = UIImage(named: "user")
        let imageData = UIImage.jpegData(image)
        UserDefaults.standard.setValue(imageData, forKey: "savedImage")

    }
    @IBAction func offerButtonTapped(_ sender: UIButton) {
        // present image
        let imageData = UserDefaults.standard.object(forKey: "savedImage")
        let image = UIImage(data: (imageData as! NSData) as Data)
        productImageView.image = image
        // crash

        
        
    }
    

}
Run Code Online (Sandbox Code Playgroud)

uiimage ios swift userdefaults

3
推荐指数
1
解决办法
6894
查看次数

如何解码对象数组并从用户默认值中检索它?

我有一个arraywith 类型[NotificationTriggers],我想存储在userdefaults. 为此,数据需要是encodeddecoded。我在这里遵循了教程:

https://cocoacasts.com/ud-5-how-to-store-a-custom-object-in-user-defaults-in-swift

和这里:

https://www.hackingwithswift.com/example-code/system/how-to-load-and-save-a-struct-in-userdefaults-using-codable

但我仍然收到一个我似乎无法解决的错误。

我有一个我在变量的 get 和 set 中施展魔法extensionuserDefaults地方。NotificationTriggers Struct看起来像这样:

struct NotificationTriggers: Equatable, Codable {
    var doorName: String
    var notificationTrigger: String
}
Run Code Online (Sandbox Code Playgroud)

Encoding似乎工作,但在decoding我得到一个error说法

无法将“[Any]”类型的值转换为预期的参数类型“Data”

这是代码:

extension UserDefaults {
    var notificationTrigger: [NotificationTriggers] {
        get {
            if let data = self.array(forKey: UserDefaultsKey.notificationTrigger.rawValue) {
                do {
                    let decoder = JSONDecoder()
                    //CODE BELOW PRODUCE ERROR
                    if let decodedData = try …
Run Code Online (Sandbox Code Playgroud)

encoding decoding ios swift userdefaults

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

IntentHandler 无法读取 UserDefaults,但 Timeline 可以

当用户更改小部件的配置时,我想读取 UserDefaults,因此我创建了一个应用程序组并将功能添加到我的主应用程序、小部件扩展和 Intent 扩展中。

\n

我可以在我的应用程序和小部件扩展之间很好地读写,但是 UserDefaults 总是nil在 IntentHandler.swift 中返回,这可能是什么原因导致的?

\n
// called from TimelineProvider\nfunc example() -> String {\n\nlet sharedDefaults = UserDefaults.init(suiteName: "group.myname")\n  let value = sharedDefaults!.value(forKey: "myKey") as! String\n// value == \xe2\x80\x9cHi this works!\xe2\x80\x9d\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我example()从 IntentHandler 调用时,值是nil. (它崩溃了)

\n

swift widgetkit userdefaults

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