【发布时间】:2020-05-02 03:07:17
【问题描述】:
'NSInvalidArgumentException',原因:'不可接受的属性值类型:property = "save1D";所需类型 = NSData;给定类型 = Swift.__SwiftDeferredNSArray;
我已经被困在这几天了。我正在尝试保存和加载核心数据。我正在尝试将集合视图中的数组保存到表格视图中,然后将它们重新加载回集合视图中。我一直无法找到适合我需要的解决方案。我确定我错过了一些明显的东西,但我无法看到它。谁能帮我解决这个问题?
@IBAction func saveData(_ sender: Any) {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "TextSave", in: context)
let textEntity = NSManagedObject(entity: entity!, insertInto: context)
textEntity.setValue(v1, forKey: "save1D")
textEntity.setValue(i1, forKey: "save2D")
textEntity.setValue(ImageView, forKey: "picCock")
do {
try context.save()
print("saved")
} catch {
print("failed save")
}
}
func getData() {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "TextSave")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject]
{
v1 = data.value(forKey: "save1D") as! [String]
i1 = data.value(forKey: "save2D") as! [String]
ImageView = (data.value(forKey: "picCock") as! UIImageView)
}
} catch {
print("failed")
}
}
【问题讨论】:
-
而不是 KVC (
setValue) 使用TextSave子类和点表示法。好处是您在编译时会遇到类型不匹配错误。