2014-10-18 11 views
6

Próbuję użyć tego samego podstawowego modelu danych w mojej aplikacji, a także w rozszerzeniu, ale nie jestem pewien, jak udostępnić podstawowy model danych między 2 Klasa dla podstawowego modelu danych używa przestrzeni nazw z nazwą klasy, więc gdy próbuję pobrać obiekty w rozszerzeniu, otrzymuję błąd, który nie może załadować klasy o błędzie "".Swift - udostępnianie modelu danych rdzenia w grupie aplikacji (w rozszerzeniu)

CoreData: ostrzeżenie: nie można załadować klasy o nazwie "Dali.Alarm" dla jednostki "Alarm". Klasa nie została znaleziona, zamiast tego używa domyślnego obiektu NSManagedObject.

Czy mimo to nie należy używać przestrzeni nazw w nazwie klasy, czy istnieje sposób, aby rozszerzenie dziedziczyło przestrzeń nazw głównego projektu?

Core Data Entity

Odpowiedz

10

Utknąłem na to wcześniej. Wydaje się, że jest to prawdziwy problem i nie zaszkodzi by złożyć go jako żądanie funkcji/błąd w Apple.

W międzyczasie można obejść go dwoma krokami. Najpierw oznakuj podklasy NSManagedObject za pomocą @objc(ClassName). Wystarczy włożyć ją wyżej deklaracji klasy:

@objc(ClassName) 
class ClassName: NSManagedObjectSubclass { 
    @NSManaged var name : String 
} 

drugie, wróć do zarządzanego modelu obiektowego i usunąć z przestrzeni nazw „klasa” w polu Nazwa inspektora dla podmiotu ty pracujesz.

ten pracował dla mnie dzisiaj, po przeczytaniu tego: I can't use my core data model in two targets in a Swift project

+1

Ten pracował dla mnie. Pamiętaj też, aby wyczyścić po wprowadzeniu zmian. – mokagio

+0

Po prostu potwierdzenie: kiedy mówisz "wróć do zarządzanego modelu obiektu i usuń przestrzeń nazw z pola" klasa ", oznacza to, że jeśli przed tym polem było" myApp.Entity ", to teraz powinno być tylko" Entity " "? – cdf1982

+1

Tak ... Powinienem też dodać, że niedawno dostałem notatkę, że Apple uważa, że ​​naprawili to w Xcode 7, który jest teraz w wersji Beta. Jednak jeszcze tego nie testowałem. –