Criei um modelo de dados principais no xcode 3.2 e, depois de atualizar o Xcode 4.2, adicionei uma nova entidade da subclasse NSManagedObject (consulte a nova entidade).
Primeiro, parece estranho porque não faz parte do mesmo grupo que o antigo. Aqui está a figura no meu xcode 4.2 (o AlkitabDB é o que eu criei no xcode 3.2, o EndeDB é o novo da versão atual do xcode (4.2):
Segundo, deixei como está, então acessei a segunda entidade (a nova) da mesma maneira que a primeira entidade (a antiga), e o erro como título aparece.
Aqui está o erro:
2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}
7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
metadata = {
NSPersistenceFrameworkVersion = 320;
NSStoreModelVersionHashes = {
AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
"_NSAutoVacuumLevel" = 2;
};
reason = "The model used to open the store is incompatible with the one used to create the store";
}
Procurei a solução antes e descobri que deveria remover o aplicativo do simulador e executar novamente o aplicativo, e ele não funcionou. Alguém conhece uma solução para esse problema? Por favor ajude.
let options = [ NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true ]
Remova o aplicativo do simulador e faça uma limpeza no seu projeto. Isso deve esclarecer essas questões. Certifique-se de que você não esteja executando o depurador ao excluir o aplicativo, caso contrário ele não será excluído corretamente.
Se você quiser ter certeza de que foi, verifique este diretório
Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/
na pasta do seu aplicativo, na versão que você está executando.Nota: Isso é apenas para desenvolvimento. Para produção, você precisa implementar algum tipo de migração. Google "Migração de dados principais", com a migração leve sendo a mais simples.
fonte
Basta adicionar o atributo Opções ao criar persistentStoreCoordinator no arquivo AppDelegate.m para o método de dados do núcleo, conforme abaixo
OBJETIVO-C
RÁPIDO
Ele resolveu o meu problema ..
fonte
Resposta: remova o aplicativo do simulador, execute uma limpeza e reconstrua seu projeto.
Nota: Sempre que você executar alterações na definição de Dados Principais, exclua o aplicativo instalado no Dispositivo Físico ou Simulador, Limpe o Projeto e Reconstrua novamente.
fonte
Sim. Depois de excluir o aplicativo no dispositivo físico e reconstruí-lo, ele funciona.
fonte
Para swift, em AppDelegate.swift encontre a linha
e substitua-o por
fonte
Passei vários dias lutando contra esse erro, bem como as falhas mescladas de ModelFromBundles e obtendo o erro "Não é possível mesclar modelos com duas entidades diferentes nomeadas *".
O problema principal é que o Xcode não remove recursos antigos dos dispositivos e eu tinha versões antigas do meu modelo de dados (arquivos .mom) que estavam causando conflitos. Por isso, a exclusão do aplicativo corrigiu o problema em um dos meus dispositivos.
Depois de encontrar esta postagem no blog por meio de outra resposta do SO, tornei meu aplicativo mais tolerante com os modelos antigos, alterando esta linha que procura TODOS os arquivos .mom:
para isso, que apenas procura no diretório Filtros:
Usei recursivePathsForResourcesOfType a partir desta pergunta : para ajudar a descobrir isso registrando todos os arquivos .mom no aplicativo:
Também usei o iExplorer para examinar os arquivos .mom estranhos (ainda não tentei excluí-los).
O método abaixo também foi útil. Ele mostrou que uma entidade estava no modelo mesclado retornado por [psc managedObjectModel] que não existia mais em nenhum dos meus modelos ou na própria loja. Foi isso que me permitiu acreditar que um modelo antigo estava sendo armazenado em cache no próprio dispositivo, que a construção limpa não removeu. O método registra cada entidade que é a mesma, foi alterada, adicionada ou removida do modelo. (escrito com esta resposta do SO como ponto de partida):
use: chamado antes de adicionar cada loja ao NSPersistentStoreCoordinator:
fonte
Toda vez que você fizer alterações na definição da Data Principal, exclua os aplicativos instalados no dispositivo ou simulador físico.
fonte
Product
->Clean
fonte
A solução mais simples que funcionou para mim no Swift 2.1, Xcode 7 é:
Exclua o aplicativo do simulador (Cmd + Shift + H para ir para a tela inicial. Pressione e segure o aplicativo, clique em cruz, da maneira usual como excluir um aplicativo do seu telefone)
Cmd + Shift + H novamente para parar a dança dos aplicativos
Volte ao seu projeto e execute novamente
Eu tive esse problema ao escrever / ler o Core Data com 2 entidades configuradas. Excluir o aplicativo e executar novamente o programa corrigiu o problema
fonte
Acabei de excluir o
[Simulator App Folder]/Document/*.sqlite
arquivo depois de fazer alterações nas entidades e funcionou. E, é claro, o arquivo .sqlite contém todos os dados e estruturas armazenados que serão perdidos.fonte
Por favor, apague um aplicativo do simulador e limpe um código e execute.
fonte
Se você estiver usando o Swift.
Siga a resposta em @Stas e insira as opções, no lugar de zero, em seu App Delegate:
fonte
Tente "Redefinir conteúdo e configurações" no simulador. Trabalhou para mim depois de excluir o aplicativo e a compilação limpa
fonte
Eu tive o mesmo problema com meu aplicativo (ainda não lançado na App Store).
Aqui está como eu o consertei:
(3) foi o passo que finalmente conseguiu que ele funcionasse corretamente. Espero que isto ajude!
fonte
Embora às vezes você possa remover o aplicativo do dispositivo ao alterar o esquema no modelo de objeto gerenciado, em alguns cenários isso não é possível, por exemplo, porque você já publicou seu aplicativo com um esquema antigo.
Se for esse o caso, você deve cuidar da migração de dados antigos para o novo esquema:
Versão do modelo de dados principais e migração de dados
fonte
Você precisará migrar o modelo de Dados Principais usando a migração. Sempre que você altera o modelo, torna-o incompatível sem controle de versão. Prenda-se, é um assunto meio peludo.
http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html
fonte
Se você fizer alterações no modelo do Core Data, precisará fornecer uma política de migração que informe ao Core Data como adotar objetos persistentes existentes (criados por seus usuários com a versão lançada no momento) para o novo modelo.
Para alguns cenários, o Core Data pode inferir automaticamente o mapeamento do modelo antigo para o novo. Para alterações mais complexas, pode ser necessário implementar alguma lógica que execute a migração.
Detalhes podem ser encontrados no Guia de Programação de Versão do Modelo de Dados Principais e Migração de Dados .
Atualizar
Esta resposta aqui no Stack Overflow aborda os conceitos básicos da migração leve do Core Data e também possui algum código para você começar.
fonte
Esse problema geralmente ocorre devido à incompatibilidade entre a versão na qual o banco de dados foi criado. A abordagem geral para esse problema é excluir o aplicativo e reinstalá- lo. Mas no seu caso mencionado, a versão do DB é completamente diferente no Xcode 3.2 e 4.2. Então, é melhor usar a mesma versão do Xcode for DB.
fonte
Primeiro, as únicas coisas que devem estar no
xcdatamodeld
pacote são osxcdatamodel
arquivos. Suas subclasses NÃO devem estar naxcdatamodeld
. Mova aqueles para fora de lá. Há uma boa chance de que eles estejam confundindo o compilador.Segundo, o erro indica que o Core Data não consegue encontrar o seu modelo. Você criou dados e depois tocou no modelo? Nesse caso, você está em um estado inconsistente e precisa corrigi-lo excluindo os dados (sugerido por Philippe) ou revertendo suas alterações no modelo BACK .
fonte
xcdatamodel
arquivo, deve estar lá. São os arquivos .hem que precisam ser movidos. Use o Finder.Eu estava recebendo o erro, mas o motivo pelo qual estava recebendo o erro era o seguinte.
Originalmente, eu tinha uma Entidade chamada "Entrada" e tinha uma linha salva para essa entidade no banco de dados. Adicionei outra Entidade chamada "Person" e, depois de adicionar, fui criar e obtive o erro. Então, resolvi o problema excluindo a entidade "Pessoa" e, em seguida, criando o aplicativo, excluí a linha que estava em "Entrada" e fechei o aplicativo. Excluí o aplicativo totalmente do meu telefone e, em seguida, fiz uma reconstrução e funcionou bem. Não tenho certeza de qual etapa corrigiu o problema (a exclusão da linha ou do aplicativo), mas espero que, se você esteja procurando uma solução, isso ajude. :)
Edit: Ah, e se você se preocupou em excluir sua nova Entidade (no meu caso "Pessoa") para criar o aplicativo novamente, lembre-se de que você poderá recuperá-lo novamente usando CMD + Z!
fonte
Eu tive esse problema - primeiro redefini meu simulador e depois limpei o projeto e reconstruí-lo. E então funciona.
fonte
Quando você altera os dados principais (adicionando um campo à tabela, removendo o campo etc.), o arquivo sqlite na pasta de documentos do aplicativo precisa estar sincronizado com o seu esquema.
Este arquivo não é substituído por padrão, ele precisa ser regenerado.
Siga esses passos:
Vá para a pasta apontada por NSURL. (Esse caminho pode ser encontrado na mensagem de exceção gerada pelo aplicativo antes de travar.) Exemplo: / Usuários // Biblioteca / Suporte a aplicativos / iPhone Simulator // Aplicativos // Documentos
remover ou renomear o arquivo sqlite
Isso garantirá que o esquema e o Xcode estejam sincronizados.
fonte
Para desenvolvimento de aplicativos para mac:
Funcionou para mim, espero que isso possa ser útil.
fonte
Simulador iOS -> Redefinir conteúdo e configurações ...
Trabalhou para mim
Simulador iOS -> Redefinir conteúdo e configurações ... -> Redefinir também funciona no iOS9 (xcode 7.1)
fonte