2015-10-24 7 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 (заказ.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") 
} 

Это приводит к «НЕПРЕВЗОЙДЕННОМУ», несмотря на идентификаторах являются одинаковым или концептуально относится к тому же и только клиенту.

И если это помогает, ниже приведен код для метода customers(), который я использую для организации, который просто ссылается на отношения, а не пытается извлечь объекты из контекста.

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

    return customers 
} 
+1

Вы каким-то образом создали в своем коде два отдельных экземпляра одного и того же клиента? Если это так, было бы безопаснее использовать что-то вроде 'if cus1.objectID = cus2.objectID {}' при условии, что они являются «NSManagedObjects». –

ответ

0

Во-первых, возможно, вы создали одного и того же клиента более одного раза. Вы могли бы добавить заказ к одному экземпляру, но не к другому. first будет просто извлекать любой из них без определенного порядка из NSSet (для массива это будет зависеть от ключа сортировки).

Во-вторых, ваш звонок customers() незнакомы. В Core Data вы получите NSSet отношений с customers. Если у вас есть пользовательская функция в вашем подклассе NSManagedObject, вы можете переименовать его в нечто иное, чем имя отношения.

Смежные вопросы