将 NSURL 数组保存到 NSUserDefaults [英] Saving an array of NSURL to NSUserDefaults

查看:71
本文介绍了将 NSURL 数组保存到 NSUserDefaults的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像这样的 NSURL 项目数组:

I have an array of NSURL items like this:

var array = [NSURL]()

我正在尝试将其保存到 NSUserDefaults:

I'm trying to save this to NSUserDefaults:

let defaults = NSUserDefaults(suiteName: "group.a.project")
defaults?.setObject(array, forKey: "NSURLarray")

会导致崩溃,因为 NSURL 不能存储在 NSUserDefaults 中.

Will result in it crashing as NSURL can't be stored in NSUserDefaults.

如何将这个 NSURL 数组保存到 NSUserDefaults,以便我可以访问它并根据需要使用数组中的 NSURL(保存字符串数组,然后尝试将它们用作 NSURL 将导致错误xcode)?

How can I save this array of NSURL's to NSUserDefaults, so that I can then access it and use the NSURL's in the array as required (saving an array of strings and then trying to use them as NSURL's will result in an error from xcode)?

推荐答案

保存时,保存url的绝对字符串.加载时使用 NSURL(URLString:) 再次将字符串转换为 url

when saving, save the absolute strings of the urls. when loading use NSURL(URLString:) to make the strings into urls again

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")
    }

这篇关于将 NSURL 数组保存到 NSUserDefaults的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆