2017-02-17 10 views
0

こんにちは私がCoreDataの値を上書きする必要がある場合は、それを上書きする必要があります。すでにCoreDataに私はジョシュを持っている場合たとえば、私たちは値があるか否かを確認することができ、これを削除し、次の新しいジョシュコアデータ値を上書きする

func save(value:String, forkey:String) { 
    let context = getContext() 
    let entity = NSEntityDescription.entity(forEntityName: "Lastname", in: context) 

    let add = NSManagedObject(entity: entity!, insertInto: context) 
    add.setValue(value, forKey: forkey) 

    do { 
     try context.save() 
     print("save -> \(value)") 
    } catch { 
     print("err \(error)") 
    } 
} 
+0

このチュートリアルhttps://www.raywenderlich.com/145809/getting-started-core-data-tutorialをご覧ください。すべての基本的な方法がよく記述され、そこで実装されています。 – Oleshko

+0

コアデータに値が見つかった場合は更新しますか? – Aditya

+0

@Adiはい、申し訳ありません;)チェック - >見つかった場合は削除と保存 - >保存しないだけの場合 – k0le

答えて

0

を保存する必要があります。そして、更新し、私が最初に私たちが更新したいそのエンティティを取得し、その場所に新しい値を格納しています。この更新方法でデータベース

class func checkAndUpdateAtIndex(entry_id: String, comment_text: String, comment_name: String, comment_pic: String, comment_date: String, comment_id: String, comment_isDeleted: String, comment_userid: String) { 
    let context: NSManagedObjectContext = DataAccess.shared.managedObjectContext 
    let request = NSFetchRequest(entityName: "Comment") 
    request.predicate = NSPredicate(format: "comment_id = %@", comment_id) 

    if let fetchResults = (try? DataAccess.shared.managedObjectContext.executeFetchRequest(request)) as? [NSManagedObject] { 
     if fetchResults.count != 0{ 
      //update value 
      var managedObject = fetchResults as! [Comment] 
      managedObject[0].setValue(entry_id, forKey: "entry_id") 
      managedObject[0].setValue(comment_text, forKey: "comment_text") 
      managedObject[0].setValue(comment_name, forKey: "comment_name") 
      managedObject[0].setValue(comment_pic, forKey: "comment_pic") 

     }else { 
      // create new entity if not found 
      let newItems = NSEntityDescription.insertNewObjectForEntityForName("Comment", inManagedObjectContext: context) as! Comment 

      newItems.entry_id = entry_id 
      newItems.comment_text = comment_text 
      newItems.comment_name = comment_name 
      newItems.comment_pic = comment_pic    
     } 


      do { 
       try context.save() 
      } catch {} 
    } 
} 

の値を作成します。

0
  • フェッチオブジェクトです。
  • 新しいオブジェクトがない場合は作成します。
  • 属性を更新します。
  • コンテキストを保存します。

func save(value:String, for key:String) { 
    let context = getContext() 
    let request = NSFetchRequest(entityName: "Lastname") 
    let predicate = NSPredicate(format:"%K == %@", value, key) 
    request.predicate = predicate 
    do { 
     let fetchResults = try context.executeFetchRequest(request) 
     let object : NSManagedObject 
     if fetchResults.isEmpty { 
      let entity = NSEntityDescription.entity(forEntityName: "Lastname", in: context) 
      object = NSManagedObject(entity: entity!, insertInto: context) 
     } else } 
      object = fetchResults[0] 
     } 

     object.setValue(value, forKey: key) 

     try context.save() 
     print("save -> \(value)") 
    } catch { 
     print("err \(error)") 
    } 
} 

注:私はもう、コンパイラエラーが発生する可能性があるスウィフト2を使用していませんよ。

+0

これは機能しますが、値がエンティティにない場合、エンティティに「見つかりません」というエラーが発生します – k0le

関連する問題