[Core Data] Warning pour Device mais pas pour le simulateur

GreensourceGreensource Membre
20:05 modifié dans API AppKit #1
Bonsoir!
Je suis face à  un problème étrange, j'utilise Core Data et j'ai les warning suivant dans ma classe Entity:
warning: method definition for '-setName:' not found
warning: method definition for '-name:' not found

Et ceci pour chaque property. Or toutes ces property sont bien implémenter avec:
@dynamic name;

Idem pour les autres.

Donc à  priori je ne devrais pas avoir ce warning? Et le plus dingue c'est que j'ai le warning avec la compilation pour le device, yen a pas quand je compile pour le simulateur  B)
C'est assez bizarre tout ça. Une idée d'où cela peu venir?

Merci

Réponses

  • zoczoc Membre
    20:05 modifié #2
    Attention, @dynamic n'implémente rien... Au contraire, @dynamic indique au compilateur que c'est TOI qui fourni une implémentation pour les propriétés... C'est @synthetise qu'il faut utiliser si tu veux que les getter/setter des propriétés soient générés automatiquement.

  • GreensourceGreensource Membre
    20:05 modifié #3
    ??? Mais pourtant je suis quasi sûr d'avoir vu dans le tuto qu'Apple disais, @dynamic c'est comme @synthetize sauf que ça génère l'implémentation à  l'exec plutôt qu'à  la compilation?

    Parce que prévenir qu'on va l'implémenter ne sert à  rein si juste après il y a des setter et des getter; puisque le compilateur les aurais vu de toute façon. Je retourne vérifié.

    [edit: Donc en effet tu as raison, mais c'est Core Data qui ce charge d'implémenter les accessors dynamiquement visiblement. Et en effet quand j'utilise mes objets il n'y as pas de souci, les accessors fonctionnes. Mon problème viens des warnings seulement, dans les fait tout sembl très bien fonctionner.
  • CéroceCéroce Membre, Modérateur
    20:05 modifié #4
    Core Data utilise le Key-Value Coding.
    Or, si tu ne définis pas d'accesseur, le KVC accède aux variables d'instance directement.
  • GreensourceGreensource Membre
    20:05 modifié #5
    Ouais mais ça je suis tout à  fait d'accord Céroce, mais pourquoi il s'amuse à  me mettre un warning? Alors que ya les @dynamic qui sont là ? C'est justement pour lui dire: "T'inquiète pas coco, l'implémentation sera là  quand tu en auras besoin!"
    Donc au pire ça plante mais les warnings ne devrais même pas être là ? D'autant qu'ils ne le sont pas quand je compile pour le simulateur. B)
  • CéroceCéroce Membre, Modérateur
    20:05 modifié #6
    C'est vrai que c'est étrange. D'après ce que j'ai compris de la doc, quand on utilise @dynamic, c'est du ressort du programmeur de faire en sorte que le code soit bien chargé en mémoire lorsqu'il sera appelé. Bref, ça m'étonne que tu aies un warning, et encore plus que ton programme ne plante pas systématiquement !
  • GreensourceGreensource Membre
    20:05 modifié #7
    En fait je crois au contraire que c'est normal qu'il ne plante pas. Si j'ai bien compris, l'implémentation effective des accesseurs va ce faire quand j'appelle:
    [NSEntityDescription insertNewObjectForEntityForName:@"VLLocation" inManagedObjectContext:managedObjectContext];
    


    Je ne l'ai pas précisé vraiment mais mon objet hérite de NSManagedObject évidement.
  • zoczoc Membre
    20:05 modifié #8
    Oui, NSManagedObject est capable de "synthétiser" tout seul comme un grand des propriétés sans que tu aies à  fournir d'implémentation.

    Je suis d'accord avec tes suppositions et je suis surpris également par le warning.

    Au départ, je faisais une remarque plus générale sur le fait que @dynamic ne génère pas d'implémentation de getters/setters contrairement à  ce que tu écris (en fait tu as fait un raccourci concernant le cas spécifique de NSManagedObject  ;)  qui prête à  confusion sur l'utilité uy @dynamic).

Connectez-vous ou Inscrivez-vous pour répondre.