2015-10-24 32 views
0

我有一個問題,我有一組CoreData的對象,像這樣:CoreData關係並不一致(SWIFT)

組織>客戶>訂單> ordersku

若該等關係是單太多。

從排序屏幕能正常工作爲以下幾點:

打印(order.customer.getJSON()) - (客戶包括JSON其含訂單)

[ 
    "id": 300, 
    "orders": ({ 
     customer_id = 300; 
     deliverydate = "<null>"; 
     id = "-681F71DDA4B5413782A6150C10F7A314"; 
     skus = ({ 
      code = "CC1"; 
      id = "-4B5C1EE9DB8745A8963F6167C6DAA4F3"; 
      }, 
      code = "CC2"; 
      id = "-B3FB1A7F13334351AF9D85D9150730A1"; 
      }); 
    }), 
] 

但是,如果我在嘗試更深入地將這些對象放入關係中時嘗試相同:

print(order.customer.organisation.customers()。first!.getJ SON()) - (當組織只有一個客戶)

[ 
    "id": 300, 
    "orders":(), 
] 

我根本就沒有得到任何訂單。然後,當我嘗試爲客戶生成JSON時,這證明是有問題的。

這兩個請求直接相互執行,意味着模型的狀態不應該在兩者之間變化。

let cus1 = order.customer 
print("== \(cus1.getJSON())") 

let cus2 = order.customer.organisation.customers().first! 
print("== \(cus2.getJSON())") 

if cus1 == cus2 { 
    print("MATCHED") 
} else { 
    print("UNMATCHED") 
} 

它導致「UNMATCHED」,儘管ID相同,或概念上指的是同一個唯一的客戶。

如果有幫助,下面是我在組織中使用的customers()方法的代碼,它只是指關係而不是試圖從上下文中檢索對象。

func customers() -> [Customer] { 
    var customers = relatedcustomers.allObjects as! [Customer] 

    return customers 
} 
+1

你是否以某種方式在代碼中創建了兩個單獨的客戶實例?如果是這樣,使用'if cus1.objectID = cus2.objectID {}'這樣的類似'NSManagedObjects'可能更安全。 –

回答

0

首先,您可能不止一次創建了同一個客戶。您可以將訂單添加到一個實例,但不是另一個。 first只會從NSSet(對於數組,這取決於排序鍵)沒有定義的順序檢索任何一個。

其次,您撥打customers()的電話不熟悉。在覈心數據中,您獲得與customers的關係NSSet。如果您在NSManagedObject子類中有自定義函數,則可能需要將其重命名爲與關係名稱不同的內容。