Krótka odpowiedź:
Podstawowym problemem jest najprawdopodobniej spowodowane przez sqlite standardzie. Nie jestem co do tego pewien. Jakkolwiek, jest bardzo prawdopodobne, że jest to spowodowane ograniczeniami sqlite. Znalazłem kilka postów w Internecie, gdzie ludzie mieli problemy z wieloma ograniczeniami na jednym stole i to właśnie jest powód, dla którego działa obejście dwóch tabel.
Długa odpowiedź:
Jest to dość późno, ale mam nadzieję, że to pomaga w każdym razie.
Dzieje się tak, gdy twój podmiot ma unikalne ograniczenie i relację obowiązkową. Przypuszczam, że wynika to z dodanych wyjątkowych zachowań ograniczających w systemie iOS 9.0. Można to jednak rozwiązać na dwa sposoby:
Usuwasz ograniczenie unikalne lub relację opcjonalną. Możesz obsłużyć opcjonalną relację w kodzie. Ale nie będzie to miłe rozwiązanie.
LUB
Można użyć obejścia. Możesz mieć jedno i drugie. Możesz utworzyć super klasę o unikalnym ograniczeniu. Jednak nie będzie to działało bez problemów.
Załóżmy, że masz trzy byty. A, B i C.
A to twoja super klasa, a B to klasa podrzędna A i C to też podklasa A. A ma unikalne ograniczenie na własność primaryKey. Podczas zapisywania wystąpień B i C, nie możesz mieć B i C z tym samym kluczem podstawowym. Ponieważ CoreData będzie zarządzać zarówno jako A.
Można zmienić mieć dwie właściwości:
- int: originalPrimaryKey (NO UNIQUE)
- ciąg: primaryKey (UNIQUE)
Teraz można mapować primaryKeys do originalPrimaryKey i podczas ustawiania originalPrimaryKey można ustawić właściwość ciąg primaryKey na CLASS_NAME. {originalPrimaryKey}. To pozwoliłoby ci zachować takie zachowanie, jakiego byś się spodziewał. Ale musisz dodać obejście dla kluczy primaryKeys.
Wydaje się być błędem w XCode 7.0.1 - 8.3.1. Zrobi radar później. –