核心数据 - 编辑,递增和保存属性已为已移动实体



好吧,所以我是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
}

最新更新