在函数调用中获取异常 - 目标C.

时间:2011-05-04 11:39:44

标签: objective-c

我是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 个答案:

答案 0 :(得分:2)

您需要初始化m_cData。而且我不太确定将指针传递给整数;如果这不起作用,请尝试查看m_nTxImageSize的返回类型;

无法识别的选择器意味着它无法访问/查看m_nTxImageSize调用的方法

答案 1 :(得分:1)

Objective-C和C ++之间存在巨大差异:

=> 邮件发送后期绑定。

你应该养成做出某种错误的习惯。 查看您Ds类定义,看看您是否有访问者-m_abTxMsgImage。 记住所有实例变量(对于C ++人来说都是memeber)都受到保护。

如果要将其公开,则必须使用@public指令。 见here

另外,方法-TxCreateImage::的命名不是在objective-c中命名方法的最佳方法。

喜欢-createImageText:size:

之类的内容

对于访问者,set方法名为setMyInstVar,get方法为myInstVar。另外,将m_添加到实例变量并不常见。

Accessor可以使用@synthesize指令自动创建,该指令遵循我上面告诉你的惯例。