Получение исключений в вызове функции Objective C - PullRequest
0 голосов
/ 04 мая 2011

Я новичок в Objective C. Я портирую код cpp на Objective C.

pMsg->TxCreateImage((INT8U*)m_cData.m_abTxMsgImage,m_cData.m_nTxImageSize);

TxCreateImage((INT8U*)pData,int uLen)
{
 func definition;
}

TxCreateImage - это вызов функции.m_cData является объектом другого класса.

Является ли этот эквивалент Objective C правильным.

Data* pMsg = [[Data alloc]init];
Ds* m_cData;

[pMsg TxCreateImage:(int *)[m_cData m_abTxMsgImage] :(int)[m_cData m_nTxImageSize]];

- (void)TxCreateImage:(int*)pData :(int)uLen
{
 //func definition;
}

Я получаю исключения вроде

-[Packet m_nTxImageSize]: unrecognized selector sent to instance 0x100831e00
2011-05-04 17:11:07.756 Test-packetCreation[4633:a0f] *** Terminating app due to uncaught 
exception 'NSInvalidArgumentException', reason: '-[Ds m_nTxImageSize]: unrecognized 
selector sent to instance 0x100831e00'

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Вам нужно инициализировать m_cData для одного. И я не уверен в том, чтобы передать указатель на целое число; Если это не сработает, попробуйте посмотреть тип возвращаемого значения m_nTxImageSize;

Нераспознанный селектор означает, что он не может получить доступ / увидеть метод, вызванный m_nTxImageSize

1 голос
/ 04 мая 2011

Огромная разница между Objective-C и C ++:

=> Сообщение отправлено с поздним связыванием.

Вы должны привыкнуть к ошибкам. Посмотрите в вашем Ds определении класса и посмотрите, есть ли у вас аксессор -m_abTxMsgImage. Помните, что все переменные экземпляра (memeber для C ++ парни) защищены.

Если вы хотите сделать его публичным, вы должны использовать директиву @public. см здесь

Кроме того, наименование вашего метода -TxCreateImage:: - не лучший способ именования метода в target-c.

Предпочитаю что-то вроде -createImageText:size:

Для метода доступа набор методов называется setMyInstVar и метод get myInstVar. Также не принято добавлять m_ к переменной экземпляра.

Accessor может быть создан автоматически с использованием директивы @synthesize, которая соответствует соглашению, о котором я говорил выше.

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