No Swift 2, o seguinte código estava funcionando:
let request = NSFetchRequest(entityName: String)
mas no Swift 3 dá erro:
O parâmetro genérico "ResultType" não pôde ser inferido
porque NSFetchRequest
agora é um tipo genérico. Em seus documentos, eles escreveram isto:
let request: NSFetchRequest<Animal> = Animal.fetchRequest
então, se minha classe de resultado for, por exemplo, Level
como devo solicitar corretamente?
Porque isso não está funcionando:
let request: NSFetchRequest<Level> = Level.fetchRequest
let request: NSFetchRequest<Level> = Level.fetchRequest()
let request = Level.fetchRequest()
Respostas:
ou
dependendo da versão que você deseja.
Você tem que especificar o tipo genérico, porque caso contrário, a chamada do método é ambígua.
A primeira versão é definida para
NSManagedObject
, a segunda versão é gerada automaticamente para cada objeto usando uma extensão, por exemplo:O objetivo é remover o uso de constantes String.
fonte
Type 'Project Name' does not conform to protocol 'NSFetchRequestResult'
Acho que consegui fazer isso:
pelo menos ele salva e carrega dados do DataBase.
Mas parece que não é uma solução adequada, mas funciona por enquanto.
fonte
A estrutura mais simples que descobri que funciona no 3.0 é a seguinte:
onde o tipo de entidade de dados é o país.
Ao tentar criar um Core Data BatchDeleteRequest, no entanto, descobri que essa definição não funciona e parece que você precisará seguir o formulário:
mesmo que os formatos ManagedObject e FetchRequestResult devam ser equivalentes.
fonte
if #available(iOS 10.0) { ... }
condicionalAqui estão alguns métodos CoreData genéricos que podem responder à sua pergunta:
Supondo que haja uma configuração NSManagedObject para contato como esta:
Esses métodos podem ser usados da seguinte maneira:
fonte
NSManagedObjectID
. Portanto, antes decontext.delete(record)
adicionarlet record = context.object(with: record.objectID)
e usar esse objeto de registro para excluir.Esta é a maneira mais simples de migrar para o Swift 3.0, basta adicionar
<Country>
(testado e funcionou)
fonte
Eu também tive "ResultType" não poderia ser erros inferidos. Eles foram limpos assim que eu reconstruí o modelo de dados configurando Codegen de cada entidade para "Definição de Classe". Fiz uma breve redação com instruções passo a passo aqui:
Procurando um tutorial claro sobre o NSPersistentContainer revisado no Xcode 8 com Swift 3
Por "reconstruído" quero dizer que criei um novo arquivo de modelo com novas entradas e atributos. Um pouco entediante, mas funcionou!
fonte
O que funcionou melhor para mim até agora foi:
fonte
Eu tive o mesmo problema e resolvi com as seguintes etapas:
Depois de fazer isso, tive que remover / reescrever todas as ocorrências de fetchRequest, pois o XCode parece de alguma forma se confundir com a versão gerada pelo código.
HTH
fonte
Swift 3.0 Isso deve funcionar.
fonte