C-objectif de catégorie statique de classe de la bibliothèque, la méthode de remplacement ne fonctionne pas

StackOverflow https://stackoverflow.com/questions/1269425

  •  13-09-2019
  •  | 
  •  

Question

J'utilise Three20 pour l'iPhone et je suis en train de changer quelle méthode fait en son sein en utilisant une catégorie de classe. Il compile très bien, mais je n'atteindre le point de rupture en elle.

Je suppose une catégorie de classe affecte toutes les instances de la classe, donc je n'ai pas recompiler la bibliothèque statique pour que cela fonctionne.

Je sais aussi que la classe j'utilise pour la catégorie est perçue parce que si j'ajoute un « x » à la fin du nom de la classe quand j'interface et implémenter la catégorie du compilateur échoue.

Toute orientation est très apprécié ici.

Était-ce utile?

La solution

Comme il est indiqué ici , vous aurez besoin de l'option -all_load à régler dans d'autres drapeaux Linker de votre application afin d'avoir des catégories être liées aux bibliothèques statiques dans l'iPhone OS 3.0. -ObjC devrait faire l'affaire aussi, mais il ne fonctionne pas sur le kit de développement en cours. Comme du compilateur LLVM dans Xcode 4.2, ils fixé le bogue de liaison qui a empêché l'Autre Linker Drapeau de -ObjC de fonctionner correctement, donc vous ne devez plus utiliser -all_load (qui a des effets secondaires désagréables). -ObjC devrait être tout ce dont vous avez besoin pour obtenir des catégories à être tiré à partir de votre bibliothèque statique.

Cela pourrait contribuer à votre problème, même si je pense Three20 exige ces drapeaux de l'éditeur de liens à définir pour elle de lier correctement avec votre application en premier lieu, vous pouvez déjà avoir ces drapeaux en place.

Autres conseils

Lorsque deux catégories remplacent la même méthode sur la même classe dans le même binaire, il est pas défini qui derogatoire la priorité. Pour de meilleurs résultats, créez une sous-classe, puis remplacer la méthode sur ce point. Sinon, étant donné que Three20 est sous licence Apache, vous pouvez faire votre changement dans la bibliothèque elle-même.

J'ai un projet qui est un lien vers une bibliothèque statique et oui le drapeau -all_load est nécessaire lors de l'installation sur l'appareil avec le 3.0 sdk. -ObjC était tout ce qui était nécessaire pour le simulateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top