2016-12-11 3 views
0

확인을 소재 기존합니다, 그래서 난 CoreData에 새로 온 사람과 (하루 정도)의 NSNumber를 사용하고 난 CoreData에 대한 자습서를 시청하고 다른 성과의 번호를 저장 관리 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 

의 일반적인 문법하여 증가 할 수 있음을 발견을 위해 내가 문제로 실행 결과의 NS 번호. 마운트! 그 특정 업적을 변경 한 다른 모든 속성과 함께 저장하십시오.

답변

1

나는 개인적으로 항상 관리 코어 데이터 속성에 대한 표준 스위프트 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 
} 
+0

감사합니다! :) – Astrum