Je construis une application iphone de données de base, et j'ai du mal à récupérer de nombreuses données de relation. S'il vous plaît, supportez-moi pendant que je vous explique.iPhone Core Erreur de relation de données
J'ai utilisé le concepteur de modèle de données pour configurer une entité appelée "Item" qui contient de nombreuses entités appelées "Comment". Je récupère ensuite plusieurs entités et les affiche dans un UITableView
. Je vais chercher ces entités comme celui-ci (dans la méthode viewDidLoad
):
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Items" inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(Item_to_Areas.Name LIKE %@)",[areaManagedObject valueForKey:@"Name"]];
[request setPredicate:predicate];
[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObject:@"Item_to_item_comments"]];
NSLog(@"Results: %@", [mutableItemsFetchResults description]);
mutableItemsFetchResults = [[managedObjectContext executeFetchRequest:request error:nil] mutableCopy];
[request release];
Lorsque les robinets de l'utilisateur sur une ligne, je choisi le entiny particulier, passer à un nouveau contrôleur de vue de la table dans sa méthode d'initialisation, et appuyez sur la nouvelle vue contrôleur à la pile:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"itemObject: %@", [mutableItemsFetchResults objectAtIndex:indexPath.row]);
InspectionItemCommentsViewController *itemCommentsViewController = [[InspectionItemCommentsViewController alloc]
initWithManagedObjectContext:self.managedObjectContext
itemObject:[mutableItemsFetchResults objectAtIndex:indexPath.row]];
itemCommentsViewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:itemCommentsViewController animated:YES];
[itemCommentsViewController release];
}
dans le premier bloc de la sortie NSLog montre que les « Item_to_item_comments » entités de relations ont été récupérées, mais dans la seconde, qu'il n'était pas même si j'invoqué la demande [setRelationshipKeyPathsForPrefetching: [NSArray arrayWithObject: @ "Item_to_item_comments"]].
Voici une partie de la première sortie NSLog:
Results: (
"<NSManagedObject: 0xb356b70> (entity: Items; id: 0xb34fe60 <x-coredata://E43A90B5-AF0E- 4394-B4A7-5EFE74E181F8/Items/p1> ; data: {\n Clean = nil;\n Description = \"\";\n ItemToInformation = \"<relationship fault: 0x5e1ef00 'ItemToInformation'>\";\n \"Item_to_Areas\" = \"0xb33fd30 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Areas/p1>\";\n \"Item_to_item_comments\" = \"<relationship fault: 0x5e1d300 'Item_to_item_comments'>\";\n Keys = nil;\n Name = Other;\n \"Tenant_agrees\" = nil;\n Undamaged = nil;\n Working = nil;\n})",
"<NSManagedObject: 0xb35a930> (entity: Items; id: 0xb32acc0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Items/p2> ; data: {\n Clean = nil;\n Description = \"\";\n ItemToInformation = \"<relationship fault: 0x790de40 'ItemToInformation'>\";\n \"Item_to_Areas\" = \"0xb33fd30 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Areas/p1>\";\n \"Item_to_item_comments\" = (\n \"0xb35bcb0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p13>\",\n \"0xb35bcd0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p37>\",\n \"0xb35bca0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p5>\",\n \"0xb35bcc0 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Item_Comments/p26>\"\n );\n Keys = nil;\n Name = Lights;\n \"Tenant_agrees\" = nil;\n Undamaged = nil;\n Working = nil;\n})",
Vous pouvez voir que les entités d'articles sont extraites, y compris Item_to_item_comments
. Voici la deuxième NSLog:
itemObject: <NSManagedObject: 0xe20af50> (entity: Items; id: 0xe209fc0 <x- coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Items/p2> ; data: {
Clean = nil;
Description = "";
ItemToInformation = "<relationship fault: 0xe302e40 'ItemToInformation'>";
"Item_to_Areas" = "0xe500b90 <x-coredata://E43A90B5-AF0E-4394-B4A7-5EFE74E181F8/Areas/p1>";
"Item_to_item_comments" = "<relationship fault: 0xe302e60 'Item_to_item_comments'>";
Keys = nil;
Name = Lights;
"Tenant_agrees" = nil;
Undamaged = nil;
Working = nil;
})
Maintenant, Item_to_item_comments
est la faute. De même, dans le contrôleur de vue poussée, l'entité Items est transmise, mais Item_to_item_comments
ne l'est pas.
Je pense qu'il me manque quelque chose d'évident, mais après une journée passée sur ce problème, je ne peux pas le comprendre.
Toute aide serait appréciée.
Peter
Je comprends que les données de base ne chargent pas les relations "à-plusieurs" tant qu'elles ne sont pas demandées. Le problème est que je demande une telle relation via NSLog, mais je ne peux toujours pas obtenir les entités relationnelles. J'espère que mon explication de ce problème est adéquate. Merci encore. – futureshocked
Voir ma modification pour une extension. – TechZen
Merci, c'est une aide précieuse, logique. Erreur débutant! – futureshocked