Не удается добавить подкласс UIViewController в NSDictionary - PullRequest
1 голос
/ 02 февраля 2012

Я не хочу добавлять подкласс UIViewController в NSMutableDictionary, который не должен быть проблемой, поскольку UIViewController является объектом NSObject.

Это мой код:

NSArray *requestingPathes = [[NSArray alloc] initWithObjects:indexPath, nil];
requestingPair = [[NSMutableDictionary alloc] initWithObjectsAndKeys:requestingPathes, dele, nil];

Приложение аварийно завершает работукогда делегат «delete» (который является упомянутым подклассом) используется для инициализации словаря «requesttingPair».

Ошибка:

-[MainViewController copyWithZone:]: unrecognized selector sent to instance 0x7446b30
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainViewController copyWithZone:]: unrecognized selector sent to instance 0x7446b30

0x7446b30 является адресомподкласс "MainViewController.

Почему это происходит?

Ответы [ 2 ]

4 голосов
/ 02 февраля 2012

-initWithObjectsAndKeys: ожидает список объектов и ключей в указанном порядке - чередующийся объект, ключ, объект, ключ, ноль.То, что вы делаете, - пытаетесь присвоить ему свой dele объект в качестве ключа, из которого можно извлечь значение requestingPathes;NSDictionary объекты копируют свои ключи, когда вы устанавливаете их, и ваш контроллер представления не поддерживает копирование, так что это не удается.Предположительно, вы хотите сделать что-то вроде этого:

requestingPair = [[NSMutableDictionary alloc] initWithObjectsAndKeys:requestingPathes, @"paths", dele, @"delegate", nil];

Затем вы можете получить объект делегата, вызвав [requestingPair objectForKey:@"delegate"] и пути с [requestPair objectForKey:@"paths"].

2 голосов
/ 02 февраля 2012

Ваш ключ словаря должен соответствовать протоколу NSCopying, который не поддерживается UIViewController (и вашим MainViewController).

Вы хотите, чтобы delete было ключом или значением? В настоящее время это ключ.

...