Категория класса статической библиотеки Object-C, метод переопределения не работает

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

  •  13-09-2019
  •  | 
  •  

Вопрос

Я использую Three20 для iPhone и пытаюсь изменить действие метода в нем, используя категорию класса.Он компилируется нормально, но я никогда не дохожу до точки останова.

Я предполагаю, что категория класса влияет на все экземпляры класса, поэтому мне не нужно перекомпилировать статическую библиотеку, чтобы она работала.

Я также знаю, что класс, который я использую для категории, виден, потому что, если я добавлю «x» в конец имени класса, когда я взаимодействую и реализую категорию, компилятор завершится сбоем.

Любое руководство здесь ОЧЕНЬ ценится.

Это было полезно?

Решение

Как указано здесь, вам потребуется установить параметр -all_load в других флагах компоновщика вашего приложения, чтобы категории были связаны со статическими библиотеками в iPhone OS 3.0.-ObjC тоже должен помочь, но он не работает в текущем SDK. Что касается компилятора LLVM в Xcode 4.2, они исправили ошибку компоновщика, которая препятствовала правильной работе другого флага компоновщика -ObjC, поэтому вам больше не нужно использовать -all_load (который имеет некоторые неприятные побочные эффекты).-ObjC должно быть всем, что вам нужно для извлечения категорий из вашей статической библиотеки.

Это может усугубить вашу проблему, хотя я думаю, что Three20 требует, чтобы эти флаги компоновщика были установлены для правильной связи с вашим приложением в первую очередь, поэтому, возможно, у вас уже есть эти флаги.

Другие советы

Когда две категории переопределяют один и тот же метод в одном и том же классе в одном двоичном файле, не определено, какое переопределение будет иметь приоритет.Для достижения наилучших результатов создайте подкласс, а затем переопределите его метод.Альтернативно, поскольку Three20 имеет лицензию Apache, вы можете внести изменения в саму библиотеку.

У меня есть проект, который ссылается на статическую библиотеку, и да, флаг -all_load требуется при установке на устройство с SDK 3.0.-ObjC — это все, что нужно для симулятора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top