我有一系列这样的nsurl项:

var array = [NSURL]()

我正在尝试将此保存到nsuserdefaults:
let defaults = NSUserDefaults(suiteName: "group.a.project")
defaults?.setObject(array, forKey: "NSURLarray")

将导致它崩溃,因为nsurl不能存储在nsuserdefaults中。
如何将此nsurl数组保存为nsuserdefaults,以便我可以根据需要访问它并使用数组中的nsurl(保存字符串数组,然后尝试将其用作nsurl,将导致xcode错误)?

最佳答案

保存时,保存URL的绝对字符串。加载时,请使用nsurl(urlString:)将字符串重新设置为url

import UIKit

class ViewController: UIViewController {
    var urlsArray : [NSURL]?

    func load () {
        var urls : [NSURL] = []

        let stringsArray = NSUserDefaults.standardUserDefaults().objectForKey("stringsArray") as [String]?

        if let array = stringsArray {
            for string in array {
                var url = NSURL(string: string)
                urls.append(url!) //no null check
            }
        }

        self.urlsArray = urls
    }

    func save () {
        var strings : [String] = []

        if let array = self.urlsArray {
            for url in array {
                var string = url.absoluteString
                strings.append(string!) ////no null check
            }
        }

        NSUserDefaults.standardUserDefaults().setObject(strings, forKey: "stringsArray")
    }


}

使用kvc可以减少节省。
    func save () {
        var strings : [String] = []

        if let array = self.urlsArray as NSArray? {
            strings = array.valueForKeyPath("absoluteStrings")
        }

        NSUserDefaults.standardUserDefaults().setObject(strings, forKey: "stringsArray")
    }

关于swift - 将NSURL数组保存到NSUserDefaults,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28912787/

10-13 09:27