Przez kilka miesięcy zrobiłem sobie przerwę od kodowania i wróciłem i odkryłem zmiany w CoreData z Xcode8/iOS10/macOS Sierra.Prawidłowy sposób aktualizacji projektu Objective C dla podstawowych danych Xcode 8 Zmiany podklasy NSManagedObject
Próbowałem zrozumieć moją nową generację podklasy NSManagedObject w Objective C, ale w Internecie jest bardzo mało. Mam kilka rzeczy, które trzeba wyjaśniające zanim zacznę rozbiór mój projekt i brudząc rzeczy całkowicie ale pierwszy, niektóre rzeczy odkryłem z wywiercenie, które mogą być przydatne dla innych tam ...
gdzie rzeczy to Automatycznie generowane pliki na żywo ukryte głęboko w folderze DerivedData. Spójrz na USER-> Library-> Developer-> Xcode-> DerivedData-> ProjectName-lotsOfRandomLetters-> Build, a następnie kontynuuj otwieranie folderów, aż znajdziesz DerivedSources-> CoreDataGenerated.
Automatycznie generowane pliki nie pojawiają się w folderze projektu lub w nawigatorze, chociaż w przypadku wystąpienia błędu w jednym Xcode wyświetli się źródło.
miejsca Xcode generuje
Istnieją trzy ustawienia Codegen - ręczny/brak klasy definicji, a kategoria/rozszerzeń.
Kiedy an podmioty Codegen jest ustawiony na ręczny/brak (który był stary zachowanie) tworzenie podklasę NSmanagedObject użyciu redaktora> Utwórz NSManagedObject Podklasa generuje 4 pliki wewnątrz projektu ...
Entity + CoreDataClass.h i Entity + CoreDataClass.m i Podmiot + CoreDataProperties.h i Entity + CoreDataProperties.m
(poprzednia wersja Xcode 7 generowane Entity.h, Entity.m, Entity + CoreDataProperties.h i plików Podmiot + CoreDataProperties.m)
Jeśli e koder ntity jest ustawiony na Class Definition, Xcode automatycznie generuje te same 4 pliki w folderze danych pochodnych - nie projekt, pliki te są następnie oznaczone komentarzem informującym, że nie wolno ich zmieniać.
Xcode generuje 2 pliki, jeśli koder jednostki jest ustawiony na kategorię/rozszerzenie. Pliki te są oznaczone komentarzem informującym o tym, aby ich nie zmieniać. Są ...
Podmiot + CoreDataProperties.h i Entity + CoreDataProperties.m
nich plik 2 spodziewa się Entity.h plik będzie w projekcie i pokaże błąd w Xcode jeśli nieobecny. To jest jeden raz, że będziesz mógł zobaczyć źródło jednego z tych plików w Xcode.
Co w tych plikach
przycisk + CoreDataProperties plików wydają się być takie same jak te generowane poprzednia wersja Xcode generowane pliki z wyjątkiem jednego dodatkowo. Zawierają wszystkie atrybuty/właściwości obiektu/NSmanagedObject i metody obsługi podmiotów, które mają relację jeden do wielu lub wiele do wielu. Nowy dodatek to metoda dla metody fetchRequest podklasującej nową metodę fetchRequest programu NSmanageObject.
Pytania
1) klasa Definicja teraz oczywiste i najlepszy wybór dla Codegen gdy nie masz żadnych dodatkowych właściwości/funkcjonalności dodać do podklasy NSManagedObject, ponieważ automatycznie aktualizuje pliki dla Ciebie (kiedy zapisujesz projekt za pomocą cmd-s)?
2) Nazewnictwo plików z + CoreDataClass jest zgodne z konwencją dla kategorii w klasie, co oznaczałoby, że powinna istnieć klasa, dla której ma być rozszerzeniem.
Czy mam rację, zakładając, że pliki Entity + CoreDateClass .h/m są prostym zamiennikiem starych plików Entity.h/m? i że w rzeczywistości nie jest to kategoria, pomimo nazwy pliku?
3) Dla nowych podklas NSManagedObject powinienem importować Entity + CoreDataClass.h zamiast Entity.h?
4) Jeżeli chcę, aby mój projekt czytelne usuwając większość moich plików podklasowymi NSManagedObject, mogę tylko usunąć pliki w Xcode i ustawić podmioty Codegen do klasy definicja lub ...
istnieje magia pod kaptur, który szuka podmiotu + CoreDataClass, gdy spróbujesz # importować entity.h, czy będę musiał przejść przez wszystkie odnośniki do #import entity.h i zmienić je na #import entity + CoreDataClass.h?
5) Czy mam rację, zakładając, że jeśli chcę podklasy NSManagedObject, w której chcę dodać właściwość i metodę, która powinna ustawić kodegenu na kategorię/rozszerzenie?
6) Jeśli wybiorę kategorię/rozszerzenie, muszę utworzyć własny plik podklasy NSmanagedObject, jego po prostu entity.h nie encja + CoreDataClass.h?
7) Jeśli entity + CoreDataClass.h jest nowym akceptowanym formatem nazewnictwa dla pliku entity.h, dlaczego wygenerowany plik kategorii/rozszerzenia szuka zwykłego pliku nazwa entity.h zamiast encji + plik CoreDataClass.h ? Czy to tylko sprzeczność dotycząca części Apples i coś, co powinienem zaakceptować, czy też brakuje mi czegoś, o czym powinienem wiedzieć?
Dziękuję.
Znajdź odpowiedzi i link do odpowiedniego filmu WWDC [tutaj] (http://stackoverflow.com/a/39933534/1457385). – shallowThought