Rozwiązanie dla klas generowanych automatycznie
z generatora kodu Xcode (ios 10 i nowsze)
Jeśli utworzysz jednostkę o nazwie „YourClass”, Xcode automatycznie wybierze „Class Definition” jako domyślny typ Codegen w „Data Model Inspector”. spowoduje to wygenerowanie poniższych klas:
Wersja Swift:
// YourClass+CoreDataClass.swift
@objc(YourClass)
public class YourClass: NSManagedObject {
}
Wersja Objective-C:
// YourClass+CoreDataClass.h
@interface YourClass : NSManagedObject
@end
#import "YourClass+CoreDataProperties.h"
// YourClass+CoreDataClass.m
#import "YourClass+CoreDataClass.h"
@implementation YourClass
@end
Z opcji Codegen wybierzemy „Category / Extension” zamiast „Class Definition” w Xcode.
Teraz, jeśli chcemy dodać wyliczenie, przejdź i utwórz kolejne rozszerzenie dla automatycznie wygenerowanej klasy i dodaj tutaj definicje wyliczenia, jak poniżej:
// YourClass+Extension.h
#import "YourClass+CoreDataClass.h" // That was the trick for me!
@interface YourClass (Extension)
@end
// YourClass+Extension.m
#import "YourClass+Extension.h"
@implementation YourClass (Extension)
typedef NS_ENUM(int16_t, YourEnumType) {
YourEnumTypeStarted,
YourEnumTypeDone,
YourEnumTypePaused,
YourEnumTypeInternetConnectionError,
YourEnumTypeFailed
};
@end
Teraz możesz tworzyć niestandardowe metody dostępu, jeśli chcesz ograniczyć wartości do wyliczenia. Sprawdź zaakceptowaną odpowiedź właściciela pytania . Lub możesz przekonwertować swoje wyliczenia, ustawiając je za pomocą jawnej metody konwersji, używając operatora rzutowania, jak poniżej:
model.yourEnumProperty = (int16_t)YourEnumTypeStarted;
Sprawdź też
Automatyczne generowanie podklas Xcode
Xcode obsługuje teraz automatyczne generowanie podklas NSManagedObject w narzędziu do modelowania. W inspektorze podmiotowym:
Ręczny / Brak jest domyślnym i poprzednim zachowaniem; w takim przypadku należy zaimplementować własną podklasę lub użyć NSManagedObject. Kategoria / rozszerzenie generuje rozszerzenie klasy w pliku o nazwie ClassName + CoreDataGeneratedProperties. Musisz zadeklarować / zaimplementować główną klasę (jeśli w Obj-C, poprzez nagłówek rozszerzenie może importować o nazwie ClassName.h). Definicja klasy generuje pliki podklas o nazwie ClassName + CoreDataClass, a także pliki wygenerowane dla kategorii / rozszerzenia. Wygenerowane pliki są umieszczane w DerivedData i odbudowywane przy pierwszej kompilacji po zapisaniu modelu. Są również indeksowane przez Xcode, więc klikanie poleceń i szybkie otwieranie według nazwy pliku działa.
enum
?