У меня есть класс из внешней библиотеки, который я хочу расширить категорией.Однако этот класс использует несколько статических переменных, таких как:
static SomeClass* someClass;
Метод категории, который я расширяю, должен сделать вызов этого класса, как в
-(void) categoryMethod
{
[someClass someMethod];
}
Если я это сделаючто компилятор будет жаловаться:
'someClass' was not declared in this scope
Итак, я решил, что мне, вероятно, нужно объявить статический SomeClass как extern:
extern SomeClass* someClass;
Однако это приводит к следующей ошибке компоновщика:
"_someClass", referenced from:
_someClass$non_lazy_ptr in UsingSomeClass.o
(maybe you meant: _someClass$non_lazy_ptr)
Symbol(s) not found
Я думаю, что мне не хватает чего-то простого и глупого.Я могу использовать статическую библиотеку просто отлично.Я предполагаю, что статические переменные являются локальными для класса, который я хочу расширить, есть ли способ сказать компоновщику, что это статические переменные, которые я собираюсь использовать?
Или это просто неМожно ли расширить класс Objective-C, который использует статические переменные (соответственно, где моя категория должна использовать эти статические переменные)?
PS: поскольку я связываю статическую библиотеку, которая содержит класс, который я хочу расширить,Первоначально я столкнулся с проблемой, которую необходимо решить с помощью других флагов компоновщика -ObjC и -all_load.Но я прошел через это, это не проблема, я могу писать категории для других классов в этой статической библиотеке просто отлично.