Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOS] CoreData

Enregistrer mes données

    18 juin 2012 à 11:49:46

    Bonjour,

    J'essaye de me mettre à la programmation sous iOS, j'ai suivi plusieurs tuto et là j'en suis à CoreData.
    Je suis parti d'un nouveau projet "Master détail application" sous xCode avec utilisation de CorData.

    Là j'essaye juste dans la page "Détail" (yanouilDetailViewController) d'ajouter un bouton pour enregistrer un nouvel attribu. (Juste pour comprendre comment ça marche.)


    Mon yanouilDetailViewController.h donne :

    #import <UIKit/UIKit.h>
    
    #import <CoreData/CoreData.h>
    
    @interface yanouilDetailViewController : UIViewController
    
    
    @property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
    
    @property (strong, nonatomic) id detailItem;
    
    @property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
    @property (weak, nonatomic) IBOutlet UITextField *textField;
    - (IBAction)button:(id)sender;
    
    @end</citation>
    
    et mon yanouilDetailViewController.m donne :
    
    <citation>#import "yanouilDetailViewController.h"
    
    @interface yanouilDetailViewController ()
    - (void)configureView;
    
    @end
    
    @implementation yanouilDetailViewController
    
    @synthesize fetchedResultsController = fetchedResultsController;
    @synthesize managedObjectContext = managedObjectContext;
    
    @synthesize detailItem = detailItem;
    @synthesize detailDescriptionLabel = detailDescriptionLabel;
    @synthesize textField = textField;
    
    
    
    
    
    #pragma mark - Managing the detail item
    
    - (void)setDetailItem:(id)newDetailItem
    {
        if (detailItem != newDetailItem) {
            detailItem = newDetailItem;
            
            // Update the view.
            [self configureView];
        }
    }
    
    - (void)configureView
    {
        // Update the user interface for the detail item.
    
        if (self.detailItem) {
            self.detailDescriptionLabel.text = [[self.detailItem valueForKey:@"timeStamp"] description];
        }
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    	// Do any additional setup after loading the view, typically from a nib.
        [self configureView];
    }
    
    - (void)viewDidUnload
    {
        [self setTextField:nil];
        [self setLabel:nil];
        [super viewDidUnload];
        // Release any retained subviews of the main view.
        self.detailDescriptionLabel = nil;
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }
    
    
    
    - (IBAction)button:(id)sender {
    
            NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
            NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
            NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
            
            [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"];
    
    
    }
    
    @end
    



    Lorsque je teste mon bouton, l'app crash est j'ai ce message :
    Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Event''

    Bref à priori je n'ai pas de NSManagedObjectModel. J'ai beau chercher je ne trouve pas comment le déclarer et lui donner les bon paramètre. (je pensais que c'était le delegate qui se chargait de cela?!)

    Si une âme charitable peu me donner un coup de main pour comprendre un peu mieux je suis preneur.

    Merci beaucoup
    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2012 à 17:08:12

      Bonjour,

      J'ai modifié le titre de ton sujet afin qu'il soit conforme aux règles du forum "Mobile" et j'ai appliqué le bon zCode pour exposer ton code.

      Merci de faire attention à l'avenir.
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        20 juin 2012 à 16:09:34

        oups, désolé...

        Je verais attention...

        De mon côté, j'ai avancé.
        En fait pour récupérer mon content, j'utilise :
        NSManagedObjectContext *context = [[[UIApplication sharedApplication] delegate] managedObjectContext];
        


        C'est à prioris pas top car j'ai un message dans X-code : Instance method '-managedObject' not found (return type defaults to 'id')
        Mais çà marche, j'arrive à enregistrer mes données dans coredata.

        J'ai pas mal avancé, j'arrive à les ressortir et les faire afficher dans une nouvelle View dans des textField.

        Par contre maintenant je ne trouve pas du tout comment mettre à jour c'est information.

        Comment mettre à jour les enregistrement dans coredata?

        Pour info dans ma MasterViewController j'utilise le code ci-dessous pour envoyer les info dans ma vue DetailViewController (rien de nouveau)

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
                NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
                [[segue destinationViewController] setDetailItem:object]
        

        Et dans ma DetailViewController j'utilise le code ci dessous pour récupèrer les données :

        self.detailattributeLabel.text = [[self.detailItem valueForKey:@"attributeName"] description];
        


        D'ou ma nouvelle question : APRES comment réaliser la mise à jour????

        Avez vous des pistes?

        j'ai trouvé çà mais je n'arrive pas à mettre en pratique...
        − (id)valueForKey:(NSString *)key -> pour obtenir une propriété ;
        − (void)setValue:(id)value forKey:(NSString *)key -> pour modifier une propriété.

        Merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter

        [iOS] CoreData

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown