Zho*_*ouW 2 nsurl nsuserdefaults swift
我有一系列NSURL项目,如下所示:
var array = [NSURL]()
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其保存到NSUserDefaults:
let defaults = NSUserDefaults(suiteName: "group.a.project")
defaults?.setObject(array, forKey: "NSURLarray")
Run Code Online (Sandbox Code Playgroud)
由于NSURL无法存储在NSUserDefaults中,因此会导致崩溃.
如何将这个NSURL数组保存到NSUserDefaults,以便我可以根据需要访问它并在数组中使用NSURL(保存一个字符串数组然后尝试使用它们作为NSURL将导致xcode出错)?
您可以将URL数组存档到NSData实例,并将其存储在用户默认值中.要保存:
let urls = [ NSURL(string: "http://www.google.com")!, NSURL(string: "http://www.stackoverflow.com")! ]
let defaults = NSUserDefaults(suiteName: "group.a.project")
let data = NSKeyedArchiver.archivedDataWithRootObject(urls)
defaults?.setValue(data, forKey: "myUrls")
Run Code Online (Sandbox Code Playgroud)
载入:
if let data = defaults?.valueForKey("myUrls") as? NSData {
if let urlsArray = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [NSURL] {
println(urlsArray)
}
}
Run Code Online (Sandbox Code Playgroud)
保存时,保存网址的绝对字符串.加载时使用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")
}
}
Run Code Online (Sandbox Code Playgroud)
使用KVC可以减少储蓄.
func save () {
var strings : [String] = []
if let array = self.urlsArray as NSArray? {
strings = array.valueForKeyPath("absoluteStrings")
}
NSUserDefaults.standardUserDefaults().setObject(strings, forKey: "stringsArray")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3249 次 |
| 最近记录: |