UIViewController *viewVC = nil;
[blah blah blah]
viewVC.referringObject = [selectedObject managedObjectContext];
viewVC.referringTransaction = referringObject;
Тем не менее, я получаю сообщение об ошибке при компиляции кода как:
request for member 'referringObject' in something not a structure or union
Это потому, что UIViewController не имеет свойства referringObject
. (Попробуйте скомпилировать с помощью Clang вместо GCC; возможно, оно даст вам более четкое сообщение об ошибке.) У него также нет свойства referringTransaction
, поэтому, если вы вырежете первое назначение, вы получите похожую ошибку для второй.
Вы объявили viewVC
как указатель на UIViewController, так что это все, что знает компилятор: viewVC
будет содержать либо nil
, либо указатель на UIViewController. Он не предполагает ничего о том, какие подклассы UIViewController вы можете создавать. Вы сказали, что этот объект является UIViewController, поэтому вы не можете назначить эти свойства этого объекта, потому что у UIViewController их нет.
Вам необходимо объявить viewVC
как указатель на объект, который имеет с этими свойствами. Поскольку вы собираетесь хранить указатель на экземпляр одного из двух разных классов (я предполагаю, что оба класса объявляют, что их экземпляры имеют эти свойства), существует два решения:
- Создайте протокол, который объявляет два свойства, и заставьте FirstViewController и SecondViewController объявлять соответствие этому протоколу и объявить переменную как содержащую указатель на объект, который соответствует этому протоколу.
- Создание абстрактного подкласса UIViewController, который объявляет и реализует два свойства, и создание подклассов FirstViewController и SecondViewController абстрактного подкласса, и объявление переменной как содержащей указатель на экземпляр абстрактного подкласса.
Вероятно, я бы сделал последнее и переместил бы все, что вы сейчас скопировали и вставили между First и SecondViewController, в абстрактный класс.