2017-01-01 2 views
0

から前回フェッチしたオブジェクトから削除されます。
ある時点で、最新のDayをフェッチして、Transactionsを期間(月単位と年単位)でフィルタリングし、別のDayオブジェクトに追加して保存します。ここでNSSetフィルタオブジェクトは、私は私のコアデータには多くの関係のセットアップに1を持っているコアデータ

は私のコードです:

// get latest day from core data 
let lastDay = fetchDays(context: context) { request in 
    request.sortDescriptors = Day.defaultSortDescriptors 
    request.fetchLimit = 1 
}.first 

これは私に正しいDayオブジェクトを取得します。この後、私はフィルタ処理トランザクションを取得したい:

let filteredTransactions = lastDay?.transactions?.filtered(using: NSPredicate(format: "period IN %@", [.monthly, .yearly])) 

私は新しいDayオブジェクトに追加し、コアデータにそれを保存したいフィルター取引したら:

context.performChanges { 
    let day = Day(context: self.context) 
    day.date = NSDate.today() 
    day.transactions = filteredTransactions as NSSet? 
} 

をこれもなりますコアデータ内を正しく保存しますが、この時点以降、(月次および年次)フィルタリングされたトランザクションはlastDayオブジェクトから削除されています。

このオブジェクトを再度フェッチすると、トランザクションは終了します。
私は何が起こっているのか分かりません。フィルタリングされたすべてのタイプのトランザクションも削除されているようです。

何が起こっているのか把握するのに一日中努力しましたが、問題を把握できないようです。
フィードバックをいただければ幸いです。

+0

は結果を壊す日と取引関係ですか? lastDayはフィルタリングされたトランザクションに関連しますが、新しいDayレコードを作成し、フィルタリングされたトランザクションの所有権を新しいレコードに変更したら? – bubuxu

+0

どうすればいいですか?私はNSSetの変更可能なコピーを作成しようとしましたが、同じ結果 – Kobe

答えて

1

取引の完全な新しいリストを作成し、新しいデーのレコードに各トランザクションの日のオブジェクトを設定します。

context.performChanges { 
    let day = Day(context: self.context) 
    day.date = NSDate.today() 
    if let transactions = filteredTransactions { 
     for t in Array(transactions) { 
      let transaction = Transactions(context: self.context) 
      transaction.clone(from: t) // write extension method to Transactions 
      transaction.day = day 
     } 
    } 

} 
+0

素晴らしい答え。ありがとう、それはすべて今働いている。 – Kobe

関連する問題