NSData et Mavericks : une méthode rejetée.

Bonjour,


 


Je viens d'updater l'OS et XCode. De Lion, je suis passé à  Mavericks.


Dans mon synthé, j'utilise des structures C pour que l'application communique avec l'audio unit.


 


La méthode "getBytes:lenght" ne marche plus, alors que jusqu'alors, cela fonctionnait très bien.



NSData *data = [NSData alloc];//ça marche
[data initWithContentsOfFile: filePath];//ça marche aussi(filePath est un NSStrings)

[data getBytes:monInstanceDeStructure length:sizeof(MaStructure)];//là , ça plante!

Le compilateur m'indique :



*** -length only defined for abstract class. Define -[_NSPlaceholderData length]!

Notons que la documentation ignore ce que "NSPlaceholderData" veut dire...


 


L'appli du coup plante à  ce moment et ne marche pas.


 


Auriez-vous une idée? Merci par avance...


Réponses

  • yoannyoann Membre
    mars 2014 modifié #2

    C'est quoi ce code ?!!!!


    Ta création d'objet doit TOUJOURS être faite de la sorte :



    NSData *data = [[NSData alloc] initWithContentsOfFile: filePath];

    Lis la doc ! Ton objet peut changer de type et d'adresse au init ! C'est ce qui se passe ici, le NSData alloc ne crée qu'un placeholder en mémoire et c'est ton init qui va créer l'objet réel en fonction des arguments. De fait ton pointeur a changé d'adresse !


    Il ne faut JAMAIS éclater l'appel de alloc et d'init.


  • HerveHerve Membre

    Bien vu Yoann, c'était bien ça!! Je m'en souviendrai... (Je n'avais pas vu ça dans la doc non plus il faut dire, bien que l'ayant lue!)


     


    Merci beaucoup, le problème est résolu. Merci!


  • HerveHerve Membre

    C'est donc un principe global de NSObject. Je n'avais jamais remarqué. Merci pour le lien.


     


    Le plus souvent, je fais "naturellement" 



    [[MaClasse alloc]init];

    plus par habitude que pour une autre raison. Je ferai attention désormais à  corriger cette erreur si je la retrouve dans mon code.


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