一、实现通过传入id查询item的方法
struct EditItem: View {
var fetchRequest : FetchRequest<EditSuit> //这里只声名了一个fetchRequest, 后面在init中初始化
}
在init中初始化
init(suit: Suit){
self.suit = suit
imageModel = ImageModel(img: suit.img, armpx: suit.armpx)
fetchRequest = FetchRequest<EditSuit>(
entity: EditSuit.entity(),
sortDescriptors: [],
predicate: NSPredicate(format: "uuid == %@", suit.uuid)
)
}
这样使用
func checkSuit() -> Bool{
//从coredata里取对应的皮肤
guard let suitToEdit = fetchRequest.wrappedValue.first else {
print("no \(suit.uuid) found")
return false
}
//判断标题是否已经修改了
...
}
二、需要修改coredata里的内容的时候
func saveSuitName(suitName: String){
//从coredata里取对应的皮肤
guard let suitToEdit = fetchRequest.wrappedValue.first else {
print("no \(suit.uuid) found")
return
}
//修改名称
suitToEdit.enName = suitName
suitToEdit.cnName = suitName
fetchRequest.update() //这里会提示报错Cannot use mutating member on immutable value: 'self' is immutable
}
其实可以不用那个
func saveSuitName(suitName: String){
//从coredata里取对应的皮肤
guard let suitToEdit = fetchRequest.wrappedValue.first else {
print("no \(suit.uuid) found")
return
}
//修改名称
suitToEdit.enName = suitName
suitToEdit.cnName = suitName
//fetchRequest.update() //这里会提示报错Cannot use mutating member on immutable value: 'self' is immutable
//直接保存managedObjectContext
do {
try self.managedObjectContext.save()
} catch {
print(#line, "save EditSuit error", error as NSError)
}
}
还需要在前面增加一下managedObjectContext声名
struct EditItem: View {
var fetchRequest : FetchRequest<EditSuit> //这里只声名了一个fetchRequest, 后面在init中初始化
@Environment(\.managedObjectContext) var managedObjectContext //在声名中增加这个, 保存coredata用
}
如果要用fetchRequest.update(),要在EditItem里用@FetchRequest来声明 fetchRequest, 以后遇到再研究。