Pergunta

Eu estou tentando escrever um simples editor de exibição de tabela para uma entidade Core Data. Infelizmente eu estou correndo em problemas.

O erro ocorre quando adicionar a primeira entidade para a mesa. O processo para apresentar o diálogo modal é a seguinte:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Group" inManagedObjectContext:context];
    insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
NSManagedObject *newManagedObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:context];

NameEditController *dialog = [[NameEditController alloc] init];
dialog.managedObject = newManagedObject;
[newManagedObject release];

UINavigationController *navCtrlr = [[UINavigationController alloc] initWithRootViewController:dialog];
navCtrlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[[self navigationController] presentModalViewController: navCtrlr animated:YES];    
[navCtrlr release];

Dentro de NameEditController, eu tenho essa após o botão OK é pressionado:

NSString* name = self.nameLabel.text;
[self.managedObject setValue:name forKey:@"name"];

NSError *error = nil;
if (![managedObject.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
UIViewController *ctrl = [self parentViewController];
[ctrl dismissModalViewControllerAnimated:YES];

A primeira vez que eu criar um objeto (quando a lista estiver vazia) fico com esta:

Exceção foi pego durante o processamento do núcleo mudança de dados: [valueForUndefinedKey:]: da entidade do Grupo não é valor de chave de codificação compatível para a chave "(nulo)".

Se eu preencher o campo 'nome' antes de apresentar o diálogo, eu sou capaz de adicionar a primeira entidade com sucesso:

[newManagedObject setValue: @ "Novo Grupo" forKey: @ "nome"]; // funciona este

Eu estou usando NSFetchedResultsController para gerenciar a exibição de tabela BTW.

Obrigado!

Foi útil?

Solução 2

Yarr ... desculpem-me, era, na verdade, na minha função didChangeObject:atIndexPath:forChangeType:newIndexPath: rapidamente copiado de outro local. Aparentemente uma exceção lançada aqui pode entrar obscurecida do método save:.

Outras dicas

Em seu primeiro bloco de código, a terceira linha de código parece estar fora de contexto. Não tenho certeza se há algo lá que podem estar contribuindo.

Em segundo lugar, a maneira mais fácil de obter-se um NSManagedObject em um NSManagedObjectContext de um nome de entidade é usar o [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:]. Selector

Então, eu faria algo como:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityName:@"Group" inManagedObjectContext:context];

Você não precisa liberar newObject mais, uma vez que o [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:] seletor para retornar um objeto com um manter a contagem de 0. Além disso, certifique-se de que você tem NameEditController especificando sua propriedade managedObject como retidos <. / p>

Para resolver o problema real, parece que talvez você tem 'nome' especificado como uma propriedade necessária no seu modelo de dados? Uma captura de tela mostrando os detalhes para 'nome' em seu modelo de dados ajudaria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top