2010-03-26 3 views
2

J'essaie d'accéder à une relation (un à plusieurs) par programmation. Mon modèle de données contient un langage appelé NSManagedEntity (avec deux attributs de chaîne) avec une relation à une entité appelée WordCategory (un-à-plusieurs). J'utilise un NSFetchRequest pour obtenir toutes les entités de langue. ça fonctionne bien. Je reçois le valueForKey pour la relation et cela fonctionne très bien. Je peux travailler avec ses objets. Cependant, lorsque je tente d'envoyer le nombre de messages à l'NSSet qui stocke les objets WordCategory je reçois unCore-data: lors de l'accès à une relation, la méthode count sur NSSet échoue

En d'autres termes, cela fonctionne en ligne:

 NSLog(@"word category count %@",[[wordCategory anyObject] valueForKey:@"name"]); 

Celui-ci ne compte pas:

NSLog(@"word category count %@",[wordCategory count] 

Je reçois le message: EXC_BAD_ACCESS dans le débogueur.

Voici le reste du code:

NSManagedObjectContext *moc = [myAppDelegate managedObjectContext]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Language" inManagedObjectContext:moc]]; 

NSError *error = nil; 
NSArray *results = [moc executeFetchRequest:request error: &error]; 
if (error) { 
    [NSApp presentError:error]; 
    return; 
} 

NSManagedObject *obj = [results objectAtIndex:0]; 
NSSet *wordCategory = [obj valueForKey:@"category"]; 
NSLog(@"word category count %@",[wordCategory count]); 

Je vais apprécier toute la lumière que tout le monde peut apporter dans ce mystère. Merci de votre aide!

Répondre

5
  • (NSUInteger) comptent

Le type de retour de la méthode compter sur NSSet est NSUInteger. Donc, si vous essayez d'utiliser% @ pour faire référence à ce type, vous obtiendrez le message: EXC_BAD_ACCESS dans le débogueur. Vous accédez à un type de valeur inattendue.

Essayez d'utiliser% d à la place.

NSLog (@ "nombre de catégories de mots% d", [nombre de mots de la table]);

Edité après le commentaire de bobDevil (réponse précise - plus dans les commentaires):

NSLog (@ "mot catégorie count% lu", [count wordCategory]);

Tout le meilleur.

+0

c'est un NSUInteger donc il devrait réellement utiliser% lu. Voir "Dépendances de plate-forme" sous http://developer.apple.com/mac/library/documentation/cocoa/conceptual/Strings/Articles/formatSpecifiers.html – bobDevil

+0

Merci pour l'information. Tu as raison. Je vais mettre à jour le poste, afin que chacun puisse le lire facilement. –

+0

merci! Qui aurait pensé que la réponse était si simple et claire – theprole

Questions connexes