我将图像保存为Parse Data作为NSURL的数组。一旦我将它们带回我的应用程序,我想将它们转换为[String],以便我的应用程序可以暂时存储它们。有什么想法吗?
这是我的代码......
//像这样保存....
vc.videoImageArry = defaults.setObjectForKey("vidImages)
//像这样检索......
vc.vidImageArray = defaults.objectForKey("vidImages") as! [NSURL]
答案 0 :(得分:2)
您可以将每个NSURL
转换为NSData
以便保存
func save(urls: [NSURL]) {
let urlsData = urls.map { $0.dataRepresentation }
NSUserDefaults.standardUserDefaults().setObject(urlsData, forKey: "urlsData")
}
稍后您可以检索NSData
数组并将其转换回[NSURL]
func load() -> [NSURL]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [NSData]
return retrievedData?.map { NSURL(dataRepresentation: $0, relativeToURL: nil) }
}
或者,您可以将网址保存为String(s)
func save(urls: [NSURL]) {
let urlsData = urls.map { $0.absoluteString }
NSUserDefaults.standardUserDefaults().setObject(urlsData, forKey: "urlsData")
}
func load() -> [NSURL?]? {
let retrievedData = NSUserDefaults.standardUserDefaults().arrayForKey("urlsData") as? [String]
return retrievedData?.map { NSURL(string: $0) }
}
正如下面的评论中所讨论的,如果使用NSUserDefaults
函数将数据写入save
,我们知道数组的每个元素都是{{1代表有效的String
。
因此,我们可以使用NSURL
的替代版本将load
的返回类型从[NSURL?]?
更改为[NSURL]?
。
load
答案 1 :(得分:0)
要从NSURL
转换为String
:
String(url)
要从String
转换为NSURL
:
NSURL(string: string)
这是一个完全有效的示例,可以双向转换数组:
import Cocoa
let urls = [NSURL(string: "http://www.swift.org/")!, NSURL(string: "http://www.apple.com/")!]
let strings = urls.map { String($0) }
let backToUrls = strings.map { NSURL(string: $0)! }
我相信以上内容可以回答您的具体问题。
话虽如此,保存线并不适合我。如果您对该行有困难,您可能需要进一步查看NSUserDefaults
或提出单独的问题。您需要粘贴更多上下文,例如上下行,以及您收到的确切错误消息。