2011-07-06 3 views
0

Je travaille sur un projet de données de base qui communiquera avec mon iPad et envoyer des données de base arrière. J'ai la plupart du temps compris la partie de réseau mais j'ai des problèmes avec obtenir une demande de fetch simple pour se comporter. Voici la requête d'extraction:Une demande de récupération qui n'est pas aller chercher

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext]; 
//NSManagedObjectContext *context=[self managedObjectContext]; 
if (context == nil){ 
    NSLog(@"Crap"); 
} 
NSLog(@"Context: %@",context); 
//fetch request: (found here: http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Articles/05_Fetching.html) 
NSLog(@"Starting to fetch:"); 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Song" inManagedObjectContext:context]; 
[request setEntity:entity]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cueNo" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 
NSError *error; 
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy]; 

Si j'utilise ceci:

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext]; 

Je reçois une erreur qui dit:

+entityForName: could not locate an NSManagedObjectModel for entity name 'Song'

Si j'utilise ceci:

NSManagedObjectContext *context=[self managedObjectContext]; 

mutableFetchResults revient null même si j'ai d ata dans l'entité Song.

Je copié cette demande directement à partir de la chercher la version précédente en utilisant la première méthode pour définir le contexte et il a bien fonctionné là-bas.

Toute aide serait grandement appréciée!

Dépannage:

Printing description of persistentStoreCoordinator: 

Printing description of _managedObjectModel: 
(<NSManagedObjectModel: 0x1001c5250>) isEditable 0, entities { 
    Song = "(<NSEntityDescription: 0x100149ba0>) name Song, managedObjectClassName NSManagedObject, renamingIdentifier Song, isAbstract 0, superentity name (null), properties {\n cueName = \"(<NSAttributeDescription: 0x1001c5600>), name cueName, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueName, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n cueNo = \"(<NSAttributeDescription: 0x1001c5570>), name cueNo, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueNo, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n}, subentities {\n}, userInfo {\n}, versionHashModifier (null)"; 
}, fetch request templates { 
    newFetchRequest = "<NSFetchRequest: 0x1001c5420> (entity: Song; predicate: (cueNo < \"0\"); sortDescriptors: (null); limit: 0)"; 
} 

Printing description of _managedObjectContext: 
<NSManagedObjectContext: 0x1001c5890> 

Répondre

0

Le message d'erreur est assez clair, il vous dit que NSEntityDescription n'a pu trouver aucune entité avec ce nom dans le contexte de l'objet géré que vous avez fourni. Puisque vous semblez vérifier que le contexte n'est pas nul (une bonne première étape), vous devez ensuite considérer le reste de la pile de données de base. Le contexte d'objet géré dispose-t-il d'un coordinateur de magasin persistant? Assure-toi. Le coordinateur de magasin persistant possède-t-il un modèle d'objet géré? Ce modèle contient-il réellement l'entité Song? Quelque part le long de la ligne, quelque chose est cassé mais il n'y a pas assez de détails ci-dessus pour deviner où.

Quant à la deuxième option gestion de contexte de l'objet, executeFetchRequest:error: ne devrait revenir à zéro si une erreur se produit. Vous passez un paramètre d'erreur, c'est donc la première chose que vous devriez regarder pour déterminer ce qui ne va pas.

La demande n'est pas chercher évidemment faux, mais vos problèmes suggèrent que vos contextes d'objets gérés sont en quelque sorte cassé.

+0

Merci beaucoup! J'ai vérifié et je n'avais pas de coordinateur ou de maman. Je fais maintenant et le modèle contient l'entité de la chanson. Cependant, je ne sais pas trop comment lier le contexte au modèle. Toute aide serait grandement appréciée. –

+0

J'ai fait plus de dépannage aujourd'hui.J'ai finalement été fatigué de ne pas obtenir de résultats de mon fetch et ajouté des données par programme. J'ai finalement obtenu le résultat dont j'avais besoin mais j'ai révélé le problème que IB n'est pas connecté correctement. Une idée de ce que je peux faire pour suivre ce problème? –

+0

J'ai parcouru le fetch et j'ai imprimé une description de la variable "error" J'ai obtenu ceci: Impression de la description de l'erreur: NSDocument Si je vous comprends correctement, il n'y aurait qu'un problème si cette variable était inexacte? –

0

L'erreur vous dit que le contexte de l'objet géré n'a pas réussi modèle d'objet qui contient l'entité Song. Le modèle d'objet géré est le fichier .xcdatamodel.

Si vous souhaitez ouvrir un magasin persistant sur un autre appareil, votre application locale doit avoir accès au même fichier modèle qui a créé le magasin persistant distant et ajouter le modèle au contexte local. L'erreur que vous obtenez indique que cela ne se produit pas. Si cela fonctionnait précédemment, vous n'avez probablement pas ajouté ou supprimé le fichier .xcdatamodel définissant l'entité Song à partir de la cible de génération de l'application locale dans Xcode.

Questions connexes