好吧,所以我是Coredata的新手,使用Nsnumber(大约一天),我观看了Coredata的教程,并设法使用同一实体在CoreData中存储了许多不同的成就我称之为"成就",但现在我试图根据搜索特定"成就"并编辑其属性的名称来获取数据。
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
我如何增加结果的nsnumber。然后将其与我更改为某些成就的所有其他属性一起保存?
我个人始终使用标准的Swift Int
类型来托管核心数据属性。根据我的经验,NSManagedObject
子类自动为我提供了此功能,但是如果它为您生成NSNumber
,可能会有一种简单的方法来更改它(我尚未在Xcode 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
}