У меня есть одноэлементный класс под названием DataManager. Этот класс используется несколькими другими классами для загрузки и сохранения файлов plist.
Я добавляю возможность для DataManager сохранять снимки экрана, а также файлы plist. Для этого мне необходимо загрузить представление, снимок экрана которого я хочу сделать. Представление, которое я загружаю, поступает от контроллера, который импортирует DataManager.
Очевидно, это круговая зависимость, поэтому я использовал:
@class GardenView;
Однако это привело к следующим ошибкам:
- Получатель GardenView для сообщения класса является предварительным объявлением
- Тип получателя "GardenView", например, сообщение является пересылаемым.
- объявление Свойство 'bounds' не может быть найдено в форвардном классе
- объект 'GardenView' Свойство 'слой' не может быть найден в объекте прямого класса 'GardenView'
Похоже, он не может найти свойства, унаследованные от суперкласса UIView. Верно ли это для объявлений прямого класса?
Если я использую стандартный #import вместо @class, я получаю:
- Проблема синтаксического анализа: ожидаемый тип
для методов в GardenView, ссылающихся на Plant (которые я просто импортирую):
- (void) addPlantToView: (Plant*) plant;
- (void) addPlantToGarden: (Plant*) plant;
- (void) addPlantToViewAndGarden: (Plant*) plant;
Класс Plant ДЕЙСТВИТЕЛЬНО импортирует DataManager, но если я изменю его на @class, я получу:
- Нет известного метода класса для селектора sharedDataManager
Какое решение этой проблемы? Метод класса находится в файле заголовка (+ sharedDataManager). Я что-то делаю совершенно не так?