2016-12-11 18 views
0

コアデータを初めて使用しているため、NSNumberを使用して(約1日)、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.Amount!その特定の業績について私が変更した他のすべての属性と一緒にそれを保存しますか?

答えて

1

私は個人的には管理対象のコアデータプロパティに常に標準Swift Intタイプを使用しています。私の経験ではNSManagedObjectサブクラスが自動的にこれを提供してくれましたが、NSNumberが生成されている場合は、簡単に変更することができます(まだXcode 8ではCore Dataを行っていません)。

とにかく、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

関連する問題