Сбой приложения при попытке доступа к методу подкласса после инициализации объекта (init) с использованием родительского инициализатора - PullRequest
0 голосов
/ 01 ноября 2008

У меня есть класс, который подклассов NSMutableArray.

Я запускаю его, используя:

MyClass class = [MyClass arrayWithContentsOfFile: path];

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

- [NSCFArray loadCards]: нераспознанный селектор отправлен на экземпляр 0x454a30 * Завершение работы приложения из-за невыполненной исключительной ситуации NSInvalidArgumentException, причина: '* - [NSCFArray> mymethod]: нераспознанный селектор, отправленный экземпляру 0x454a30' приложение [32259: 20b] Стек: ( 2524995915,

Я подозреваю, что это происходит, потому что arrayWithContentsOfFile: path возвращает NSArray, а не "MyClass", поэтому он не может ответить на мой селектор.

Есть идеи?

1 Ответ

2 голосов
/ 01 ноября 2008

NSArray - кластер класса . Чтобы создать новый подкласс в кластере классов, вы должны реализовать его примитивные методы .

Если вы хотите унаследовать поведение массива массива, обычно лучше сделать это с помощью отношения has-a, а не is-a. То есть написать класс, который имеет переменную экземпляра NSArray, и просто перенаправить соответствующие сообщения в него.

Или, если вы хотите добавить новое поведение в NSArray, вы должны сделать это, добавив методы непосредственно в класс NSArray в категории .

По сути, вы в основном хотите создавать подклассы только в том случае, если вы хотите предоставить интерфейс NSArray для другого механизма хранения, и для этого задания вам все равно потребуется реализовать примитивные методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...