2011-11-09 2 views
0

Voici mon code:Erreur lors de l'enregistrement objet CoreData

- (IBAction) saveData 
{ 
    NSLog(@"saveData"); 
    [self dismissKeyboard]; 
    Fugitive *job = (Fugitive *)[NSEntityDescription insertNewObjectForEntityForName:@"Fugitive" inManagedObjectContext:managedObjectContext]; 
    job.name = txtName.text; 



    NSError *error; 

    // here's where the actual save happens, and if it doesn't we print something out to the console 
    if (![managedObjectContext save:&error]) 
    { 
     NSLog(@"Problem saving: %@", [error localizedDescription]); 
    } 

    // **** log objects currently in database **** 
    // create fetch object, this object fetch's the objects out of the database 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Fugitive" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 
    NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

    NSURL *storeURL = [[NSBundle mainBundle] URLForResource:@"iBountyHunter" withExtension:@"momd"]; 

    id globalStore = [[managedObjectContext persistentStoreCoordinator] persistentStoreForURL:storeURL]; 


    [managedObjectContext assignObject:job toPersistentStore:globalStore]; 

    for (NSManagedObject *info in fetchedObjects) 
    { 
     NSLog(@"Job Name: %@", [info valueForKey:@"name"]); 

    } 
    [fetchRequest release]; 
[self.navigationController dismissModalViewControllerAnimated:YES]; 
} 

Dans la console, je reçois cette erreur: problème de sauvegarde: L'opération n'a pas pu être terminée. (Erreur Cocoa 1570.) Le nouvel objet est créé dans le tableview, mais pas enregistré ainsi lors de la relance de l'application, l'objet disparait

+0

chances sont que vous avez un problème de configuration dans votre pile de données de base. publiez le code dans lequel vous avez configuré le modèle, le magasin persistant et le contexte. De plus, vous n'avez pas besoin de faire 'assignObject: toPersistentStore:' si vous avez configuré votre contexte pour avoir déjà un magasin et que votre application ne possède qu'un seul magasin. – XJones

+0

J'ai posté le code comme réponse, c'est trop long pour le mettre ici –

Répondre

-1
- (void)saveContext 
{ 

    NSError *error = nil; 
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 

    if (managedObjectContext != nil) 
    { 
     if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) 
     { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      abort(); 
     } 
    } 
} 


- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (__managedObjectContext != nil) 
    { 
     return __managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) 
    { 
     __managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [__managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return __managedObjectContext; 
} 

- (NSManagedObjectModel *)managedObjectModel 
{ 
    if (__managedObjectModel != nil) 
    { 
     return __managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"iBountyHunter" withExtension:@"momd"]; 
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];  
    return __managedObjectModel; 
} 

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (__persistentStoreCoordinator != nil) 
    { 
     return __persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"iBountyHunter.sqlite"]; 

    NSError *error = nil; 

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 


    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) 
    { 



    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) 
    { 
       NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }  

    return __persistentStoreCoordinator; 
} 
+0

C'est sympa de donner quelques explications ainsi qu'un gros morceau de code! – jrturton

+0

Est-ce la solution, ou plus du problème? –

Questions connexes