【发布时间】:2021-05-17 00:25:13
【问题描述】:
我是从大量 StackOverFlow 帖子中阅读代码的,因为这似乎是一个相当简单的过程,但是当我尝试在自己的代码中实现我学到的东西时,它失败了。
在我的“ViewController”didSelectRowAt 函数中,我初始化了用户默认值
let song = tableViewData[indexPath.section].songData[indexPath.row - 1]
let songImage = song.artwork
UDM.shared.defaults.setValue(song.title, forKey: "name")
UDM.shared.songCover.setValue(songImage, forKey: "cover")
然后创建一个类来保存 UserDefaults
class UDM{
static let shared = UDM()
//let defaults = UserDefaults(suiteName: com.CTMVenturesInc.MusicTesters.saved.data)
let defaults = UserDefaults()
let songCover = UserDefaults()
//other funcs
}
在我的“TealViewController”中,我创建了标签和图像元素
@IBOutlet var label: UILabel!
@IBOutlet var coverImage: UIImageView!
最后在 TealViewController 的 viewDidLoad 中设置值
if let value = UDM.shared.defaults.value(forKey: "name") as? String{
label.text = value
}
if let value = UDM.shared.songCover.value(forKey: "cover") as? MPMediaItemArtwork{
coverImage.image = value.image(at: CGSize(width: 400, height: 400))
}
仅使用默认文本即可运行并完美运行,但是当我尝试包含图像代码时出现此运行错误
Thread 1: "Attempt to insert non-property list object <MPConcreteMediaItemArtwork: 0x2830c4c80> for key cover"
所以我找到了这个帖子 Save images in NSUserDefaults? 并尝试在我的视图控制器中实现替换它
UDM.shared.songCover.setValue(songImage, forKey: "cover")
有了这个
[UDM.shared.songCover.set: UIImagePNGRepresentation(songImage) forKey: "cover"]
但是得到一个找不到 forKey 的错误。我看了这篇帖子How to pass UI image from one view controller to another? 并尝试了这个
UDM.shared.songCover.standardUserDefaults().setObject(UIImagePNGRepresentation(songImage), forKey:"cover")}
我没有在这里整理什么?
【问题讨论】:
-
你在使用一些非常旧的 Xcode 版本吗?
标签: swift userdefaults mpmediaitem apple-music apple-musickit