2017-01-01 53 views
0

我在我的核心數據一對多的關係設置:的NSSet過濾對象從以前提取的對象中刪除從核心數據

Day <----->> Transactions 

一天對象將包含交易的NSSetDate
在某些時候,我想獲取最新的日期並獲取按期(每月和每年)過濾的Transactions,並將它們添加到另一個Day對象並保存。

這裏是我的代碼:

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

這將讓我正確的日期對象。這之後,我想過濾的交易:

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

後,我有過濾的交易我想將它們添加到新的一天對象,並保存在覈心數據:

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

這也將正確保存在Core Data內部,但在此之後,我從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

相關問題