Quais são as diferenças funcionais entre o CodeGen da Coredata 'manual / none + create a subclasse NSManagedObject' vs. 'category / extension'
Eu liSubclassing NSManagedObject com swift 3 e Xcode 8 beta e leiaist ótimo tutorial. Ainda tem dúvidas sobre alguns pontos.
As semelhanças são: Eu posso personalizar as duas classes da maneira que eu quise Eu posso adicionar novos atributos ou remover ou renomear atributos. ou seja, paracategory/extension
será atualizado com uma nova compilação (nos dados derivados) e, no caso demanual/none
deixará o arquivo de classe intacto e atualizará a extensão na navegação de arquivos, ou seja, não terminarei com um arquivo duplicado. Isso tudo é tratado pelo Xcode porque eles são marcados com um pré-processador@NSManaged
Despejando algo como@NSManaged public var name: String?
direto para um @ existenNSManagedObject
subclasse não é permitida. Eu tentei fazerentity.name = "John"
mas recebi o seguinte erro:reason: '-[SomeEntity setName:]: unrecognized selector sent to instance 0x60400009b120'
. Eu acredito que isso é razoável. Acho que sem o uso do Core Data Model Editor, os métodos acessadores setter / getter não são criadoAs diferenças são:ParaCategory/Extension
você só precisa criar a classe e adicionar quaisquer funções / propriedades extras necessáriaParaCategory/Extension
os atributos são criados em dados derivados, o que é suficiente. Porque você nunca precisa ver esse arquivo. Sua existência é suficiente para fazer as coisas funcionare
E especificamente no contexto de fazeraltera às suas propriedades NSManaged:
Alterando o tipo de propriedade, p.NSDate
paraDate
é permitido apenas paraManual/None
. ExemploAqu
String?
paraString
é permitido apenas paraManual/None
. ExemploAquAlterar um nível de acesso à propriedade, p. a partir depublic
paraprivate
é permitido apenas paraManual/None
. ExemploAqu
Tendo dito que há diferença significativaE s Eu escolhoManual/None
codegen e mas don't selecione 'criar subclasse NSManagedObject'. Nesse caso, eu comecei a escrever todo o código (subclasse de NSManagedObject e escrevo NSManaged para todas as propriedades) ... ou, se eu não escrever todo esse código, ainda posso acessar / definir campos usando o KVC, o que é estranho!
Em poucas palavras, estou apenas tentando descobrir a extensão total dos recursos que posso obter usandoManual/None
.
Questão Além dos 9nota que eu preciso saber se validei corretamente, um importantequestã seria: como me mudarNSDate
paraDate
ou opcional ou não opcional, não quebre os mapeamentos entre minha classe NSManagedObject e meu gráfico de objetos enquanto altera umNSDate
propriedade paraString
quebra !! Isso tem algo a ver com coisas que garantiram a transmissão entre Swift e Objective-C, ou seja, coisas que podem ser transmitidas através deas
- sem?
ou!
?