核心数据 - 编辑、增加和保存属性到已经存在的实体
Core Data - Editing, Incrementing and Saving Attribute to already exisiting Entity
好的,所以我是 CoreData 的新手并使用 NSNumber(大约一天),我看了一个关于 CoreData 的教程,并设法使用我称为 [=18 的同一实体在 coreData 中存储了许多不同的成就=] 但现在我正在尝试根据给定的名称获取数据以搜索特定 "achievement" 并编辑其属性。
func addOneToAchievement(AchName: String) {
let getDataRequest:NSFetchRequest<Achievement> = Achievement.fetchRequest()
getDataRequest.predicate = NSPredicate(format: "theSearchName == %@" , AchName)
do {
let searchResults = try CoreDatabaseContoller.getContext().fetch(getDataRequest)
//print("number of results: \(searchResults.count)")
for result in searchResults as [Achievement] {
// print("\(result.theName!) \(result.theDescription!) is \(result.theImage!) \(result.aAmount!) / \(result.aNeededAmount!) is \(result.aStage!)")
result.aAmount! += 1
if result.aAmount! == result.aNeededAmount {
result.theImage! = "diamonds2"
result.aNeededAmount! = 100
result.aStage! = 2
}
}
}
catch {
print("ERROR: \(error)")
}
}
但是我 运行 遇到了一个问题,因为我的实体的数量属性是一个 NSNumber 并且我发现我不能通过
的通常语法来递增它
result.Amount! += 1
如何增加 result.Amount 的 NSNumber!然后将其与我为该特定成就更改的所有其他属性一起保存?
我个人一直使用标准 Swift Int
类型来管理核心数据属性。根据我的经验,NSManagedObject
子类已经自动为我提供了这个,但是如果它为你生成 NSNumber
可能有一个简单的方法来改变它(我没有在 [=26= 中完成核心数据] 8个)。
无论如何,NSNumber
只是一个数字的包装,所以你可以通过 intValue
.
得到实际值
let amount = result.aAmount!.intValue
a = NSNumber(value: amount + 1)
更改所有内容后(假设更改发生在 NSManagedObject
子类和标记为 @NSManged
的属性上),您可以通过在上下文中调用 save()
来保存。
do {
try CoreDatabaseContoller.getContext().save()
} catch {
// Error on Save
}
好的,所以我是 CoreData 的新手并使用 NSNumber(大约一天),我看了一个关于 CoreData 的教程,并设法使用我称为 [=18 的同一实体在 coreData 中存储了许多不同的成就=] 但现在我正在尝试根据给定的名称获取数据以搜索特定 "achievement" 并编辑其属性。
func addOneToAchievement(AchName: String) {
let getDataRequest:NSFetchRequest<Achievement> = Achievement.fetchRequest()
getDataRequest.predicate = NSPredicate(format: "theSearchName == %@" , AchName)
do {
let searchResults = try CoreDatabaseContoller.getContext().fetch(getDataRequest)
//print("number of results: \(searchResults.count)")
for result in searchResults as [Achievement] {
// print("\(result.theName!) \(result.theDescription!) is \(result.theImage!) \(result.aAmount!) / \(result.aNeededAmount!) is \(result.aStage!)")
result.aAmount! += 1
if result.aAmount! == result.aNeededAmount {
result.theImage! = "diamonds2"
result.aNeededAmount! = 100
result.aStage! = 2
}
}
}
catch {
print("ERROR: \(error)")
}
}
但是我 运行 遇到了一个问题,因为我的实体的数量属性是一个 NSNumber 并且我发现我不能通过
的通常语法来递增它result.Amount! += 1
如何增加 result.Amount 的 NSNumber!然后将其与我为该特定成就更改的所有其他属性一起保存?
我个人一直使用标准 Swift Int
类型来管理核心数据属性。根据我的经验,NSManagedObject
子类已经自动为我提供了这个,但是如果它为你生成 NSNumber
可能有一个简单的方法来改变它(我没有在 [=26= 中完成核心数据] 8个)。
无论如何,NSNumber
只是一个数字的包装,所以你可以通过 intValue
.
let amount = result.aAmount!.intValue
a = NSNumber(value: amount + 1)
更改所有内容后(假设更改发生在 NSManagedObject
子类和标记为 @NSManged
的属性上),您可以通过在上下文中调用 save()
来保存。
do {
try CoreDatabaseContoller.getContext().save()
} catch {
// Error on Save
}