У меня есть класс под названием MyClass
, который имеет небольшой вложенный внутренний класс под названием MyInnerClass
. Файл реализации выглядит следующим образом (а также содержит Ивар вложенного внутреннего класса):Проблемы, связанные с iVar во внутреннем классе
@class MyInnerClass;
@interface MyClass
{
MyInnerClass *myInnerClassIvar;
}
@property(nonatomic, retain) MyInnerClass *myInnerClassIvar;
@end
Затем в файле реализация, я реализую как MyClass
и MyInnerClass
. Выглядит следующим образом:
@interface MyInnerClass
{
iVar *x;
}
@property(nonatomic, retain) iVar *x;
@end
@implementation MyInnerClass
@synthesize x;
...
@end
@implementation MyClass
@synthesize myInnerClassIvar;
...
@end
Я теперь создает подкласс для MyClass
, и в нем я пытаюсь сделать вызов, как это:
self.myInnerClassIvar.x
И я получаю следующее сообщение :
Property x cannot be found in in forward class object MyInnerClass *
Я что-то забыл? До сих пор не реализовал внутренний класс, не вижу причин, почему это не должно работать.
ОБНОВЛЕНО: я переместил интерфейс MyInnerClass в .h MyClass, и все работает. Это хорошее решение?
Вы пытались получить доступ к нему через обозначение скобки ('[myInnerClassIvar x]')? Кроме того, ваши определенные и синтезированные типы различны ('iVar x' и' iVar * x') – Alexander
Доступ к нему через скобу, похоже, работает, хотя он все еще ставит предупреждение: «x устарел». Это просто странно. Что касается того, что синтезированные типы были разными, это было просто ошибкой, когда я печатал ее (я ее исправил). –
Это предупреждение от устаревания странно. – Alexander