2017-05-31 6 views
0

コアデータレコードを更新したい。まず、そのレコードが存在するかどうかを調べました。存在する場合は、新しいレコードが作成されない場合は更新する必要があります。
最後に、Postインスタンスを返す必要があります。
私はそれをsetValueで更新する方法と、ポストインスタンスを返す方法を知らない。このコード行でポストインスタンスを初期化したため、Swiftによるコアデータオブジェクトの更新

post = NSEntityDescription.insertNewObjectForEntityForName() 

私は更新のためにこれを行う方法がわかりません。

class Post: NSManagedObject { 

} 
    var post: Post! 


private static func postFromJSONObject(json: [String:AnyObject], inContext context: NSManagedObjectContext) -> Post? { 

    . 
    . 
    . 
    let coreDataStack = CoreDataStack(modelName: "ProjectPart1") 
    let mainQueueContext = coreDataStack.mainQueueContext 

    let fetchRequest = NSFetchRequest(entityName: "Post") 
    fetchRequest.predicate = NSPredicate(format: "id = %@", "\(postID)") 
    do { 
     let foundRecordsArray = try! mainQueueContext.executeFetchRequest(fetchRequest) as! [Post] 

     if foundRecordsArray.count > 0 { 
      //here is where I should update Core Data! 


     } else{ 
      context.performBlockAndWait() { 
       post = NSEntityDescription.insertNewObjectForEntityForName("Post", inManagedObjectContext: context) as! Post 
       post.title = postTitle 
       post.body = postBody 
       post.id = postID 
       post.userId = postUserID 
      } 
     } 
    } catch { 
     print("error") 
    } 
    return post 
} 

私はこの1つを試してみましたが、それはどちらか動作しませんでした。

if foundRecordsArray.count > 0 { 
       var res = foundRecordsArray[0] as NSManagedObject 
       res.setValue(postID, forKey: "id") 
       res.setValue(postUserID, forKey: "userId") 
       res.setValue(postTitle, forKey: "title") 
       res.setValue(postBody, forKey: "body") 

       post = res as! Post 

      } 

エラー:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ProjectPart1.Post title]: unrecognized selector sent to instance 0x7f8e5180e0b0' 

答えて

1
fetchRequest.fetchLimit = 1 
    var post:Post! 
    if let foundRecordsArray = try? mainQueueContext.executeFetchRequest(fetchRequest), foundRecordsArray.count > 0 
     { 
       post = foundRecordsArray[0] 

     } else{   // Create new 

     post = NSEntityDescription.insertNewObjectForEntityForName("Post", inManagedObjectContext: context) as! Post    
    } 

    post.title = postTitle 
    post.body = postBody 
    post.id = postID 
    post.userId = postUserID 
+0

感謝。私はそれがうまくいかないことを試みました。エラー: 'NSInvalidArgumentException'、理由: ' - [ProjectPart1.Post title]:インスタンスに送られた認識できないセレクタ0x7f8c0f6e5330' –

+0

@آژانسکتابそれは私と一緒に働いた。私は答えを編集しましたが、それも試してみてください – Anuraj

+0

ありがとうが、それは動作しませんでした。同じエラーで –

関連する問題