Problème de rechargement de la Base Core Data

GreensourceGreensource Membre
22:04 modifié dans API AppKit #1
Bonsoir!
J'ai un souci avec le lancement de mon appli qui utilise Core Data. La première fois que je la lance ça se passe bien, j'arrive à  sauver et récupérer des objets via Core Data. Mais dès que je la lance une deuxième fois j'obtient l'erreur suivante:
2009-11-15 21:44:21.787 VirtualLocation[8244:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 UserInfo=0x441d4f0 "Operation could not be completed. (Cocoa error 134100.)", {
    metadata =    {
        NSPersistenceFrameworkVersion = 248;
        NSStoreModelVersionHashes =        {
            VLLocation = <3cc8e697 e879747f a154b057 b0a5af7e efbd4e03 6dc47e54 735304a0 79d6635e>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =        (
        );
        NSStoreType = SQLite;
        NSStoreUUID = "142E6171-BAEC-49BA-A7B0-4DD87251F0BC";
        "_NSAutoVacuumLevel" = 2;
    };
    reason = "The model used to open the store is incompatible with the one used to create the store";
}


J'ai lu sur un site que c'était normal mais je suis pas sur d'avoir compris, parce que c'est quand même bien galère et qu'avec le tuto d'Apple ça fait pas ça du tout!
Dans mon Entity j'ai un CLLocation* et un enum, peut-être mettent ils la zone?

Réponses

  • ClicCoolClicCool Membre
    22:04 modifié #2
    Ton modèle est considéré avoir été modifié depuis sa dernière sauvegarde (Hash différent ?).
    Donc il ne peut ouvrir une base dont le modèle n'est pas identique.
    Soit tu fait attention à  ce que le modèle soit (ait l'air ?) identique
    Soit tu établi un système de conversion établissant les règle d'éventuelles conversions à  effectuer dans les entités et leurs property.
  • GreensourceGreensource Membre
    22:04 modifié #3
    Bas comment pourrait-il avoir été modifier depuis la dernière sauvegarde? Si mon appli ne tourne plus la base ne bouge pas d'un poil à  priori?
  • ClicCoolClicCool Membre
    22:04 modifié #4
    En effet, SAUF si ton code intervient dans la définition du model (par un Enum par exemple ? dans les métaData du model ?)

    En tous cas c'est ça qu'il te dit il me semble.
  • ClicCoolClicCool Membre
    22:04 modifié #5
    dans 1258318261:
    .../...
    Dans mon Entity j'ai un CLLocation* et un enum, peut-être mettent ils la zone?


    Je pencherai pour cette piste en effet.
  • GreensourceGreensource Membre
    22:04 modifié #6
    Le model je ne l'ai définit qu'avec l'outil graphique intégré dans XCode, je n'y touche pas ensuite.
    Par contre j'ai un bien enum (VLLocationType) dans les attributs de mon Entity qui est donc de type int16.

    Si ça peut aider j'ai le code suivant dans l'implémentation de mon Entity:
    #import &quot;VLLocation.h&quot;<br /><br />@interface VLLocation (PrimitiveAccessors)<br />- (NSNumber*)primitiveLocationType;<br />- (void)setPrimitiveLocationType:(NSNumber*)newLocationType;<br />@end<br /><br />@implementation VLLocation <br /><br />@dynamic name;<br />@dynamic location;<br />@dynamic primitiveLocationType;<br />@dynamic creationDate;<br />@dynamic message;<br /><br />- (VLLocationType)locationType<br />{<br />	[self willAccessValueForKey:@&quot;primitiveLocationType&quot;];<br />&nbsp; &nbsp; NSNumber *tmpValue = [self primitiveLocationType];<br />&nbsp; &nbsp; [self didAccessValueForKey:@&quot;primitiveLocationType&quot;];<br />&nbsp; &nbsp; return (tmpValue!=nil) ? [tmpValue intValue] : OTHER;<br />}<br />- (void)setLocationType:(VLLocationType)aType<br />{<br />	NSNumber* temp = [[NSNumber alloc] initWithInt:aType];<br />&nbsp; &nbsp; [self willChangeValueForKey:@&quot;primitiveLocationType&quot;];<br />&nbsp; &nbsp; [self setPrimitiveLocationType:temp];<br />&nbsp; &nbsp; [self didChangeValueForKey:@&quot;primitiveLocationType&quot;];<br />&nbsp; &nbsp; [temp release];<br />}
    


    et voici le model:
    screenshot20091115at230.png
  • ClicCoolClicCool Membre
    novembre 2009 modifié #7
    Bizarre ton code.

    Pourquoi définir une catégorie à  ton ManagedObject ?
    Je me demande si c'est pas là  qu'est le problème ...

    Et bizarre aussi cette méthode [tt]- (VLLocationType)locationType[/tt] déclarée sans valeur de retour (ni (void) ) qui renvoie tout de même une valeur.

    [EDIT] Oups, je manque de repos sur ce coup là  désolé  :o (perso, je mets toujours un espace entre la déclaration du type de valeur de retour et le nom de la méthode, c'est plus lisible ... la preuve ;) )
  • dilarogadilaroga Membre
    novembre 2009 modifié #8
    reason = "The model used to open the store is incompatible with the one used to create the store";

    Es tu sûre de n'avoir effectué aucune modification de ton modèle durant tes phases de développement ? Car le modèle semble avoir changer d'après le message d'erreur.
    Si c'est le cas, fait un clean all target de ton projet à  partir d'Xcode (ou supprime le dossier build dans le dossier de ton projet) et supprime le fichier dans lequel sont sauvées les données dans le dossier ~/Library/Application Support/Le_Nom_De_Ton_Appli/.
  • GreensourceGreensource Membre
    22:04 modifié #9
    Bas c'est ça qui est bizarre justement, c'est que j'arrive bien à  lancé une fois mon appli mais après j'ai toujours ce message d'erreur.
    Il faut à  chaque fois que je supprime mon appli du simulateur.

    Je vais essayer de viré un par un les attributs non-classique.
  • ClicCoolClicCool Membre
    22:04 modifié #10
    En fait, commence par rapatrier tes méthodes de catégories dans le corps de l'implémentation de ton entité.
    J'ai peur que si l'entité est désigné dans le model par la classe MonEntité mais sauvegardée comme MonEntité+LaCatégorie, il trouve que le résultat sauvegardé soit pas conforme au modèle.


    ... A moins que tu ai simplement mal renseigné le nom de la classe dans ton modèle ... ?
  • GreensourceGreensource Membre
    novembre 2009 modifié #11
    Bon alors j'ai simplifier au maximum pour voir d'où ça venais. Du coup dans mon Entity je n'ai plus qu'un NSString name! Pas bien méchant hein!
    Et bien non, toujours cette erreur quand le programme essais de récupérer le persistantStoreCoordinator.

    C'est dingue ce truc. Je vous file le screenshot hyper simple de mon model du coup.

    [edit: la seule différence avec le tuto d'Apple c'est que j'ai mis la Core Data Stack dans une autre classe, vous penser que j'ai pu faire une erreur en faisant ça?]

    Une autre info peut-être utilise, l'appli plante une fois sur deux. Mais vraiment une fois sur deux, j'en pleurerais presque...
  • GreensourceGreensource Membre
    22:04 modifié #12
    Bon et bien j'ai tout repris depuis le début et maintenant je n'ai plus ce problème, sauf que je vois pas d'où ça pouvais venir ce qui m'embête un peu...
    Si quelqu'un passe par là  et qu'il a une idée j'aimerais bien en savoir plus.
    Merci en tout cas!
  • ClicCoolClicCool Membre
    22:04 modifié #13
    Peut-être "tout simplement" un fichier xcdatamodel corrompu ?

    Ce serait pas la première fois qu'on se retrouve avec une corruption de fichier dans un projet Xcode  :(
  • GreensourceGreensource Membre
    22:04 modifié #14
    Possible, mais dans ce cas j'aurais eu un souci pour l'ouvrir non? C'est pas un bête fichier xml le .xcdatamodel?
Connectez-vous ou Inscrivez-vous pour répondre.