1

从一台 iOS 设备向另一台设备发送数据时,我收到这些错误。

2012-06-21 10:22:15.509 BulletTime[2324:707]-[DataHandler selectorToCall:]:无法识别的选择器发送到实例 0x19bfc0 2012-06-21 10:22:15.511 BulletTime[2324:707] * 由于应用程序终止未捕获的异常'NSInvalidArgumentException',原因是: ' - [DataHandler的selectorToCall:]:无法识别的选择发送到实例0x19bfc0' *第一掷调用堆栈:(0x356c188f 0x37a68259 0x356c4a9b 0x356c3915 0x3561e650 0x356207d3 0xb6fd1 0xb7121 0x3322f61b 0x3561b3fd 0x33110e07 0x33110dc3 0x33110da1 0x33110b11 0x33111449 0x3310f92b 0x3310f319 0x330f5695 0x330f4f3b 0x372b422b 0x35695523 0x356954c5 0x35694313 0x356174a5 0x3561736d 0x372b3439 0x33123cd5 0xb231f 0xb22c4)终止调用抛出异常(lldb)

我肯定知道这段代码会导致崩溃,但我不知道如何修复它:

- (void)sendInfo {
    //Attempting to send info to the other device.
    //Returns to the Data Handler.
    info = (BOOL*)YES;

    //Sets the requestLabel and requestData of the CameraRequestDataProvider object.
    //These are then handled in the DataHandler...
    requestLabel = @"Cam";
    requestData = [@"Cam" dataUsingEncoding:NSUTF8StringEncoding];

    //Crash occurs here...

    if (delegateToCall && [delegateToCall respondsToSelector:selectorToCall])

        [delegateToCall performSelector:@selector(selectorToCall:)];
}

在过去的几天里,我一直试图解决这个问题,但没有运气。有任何想法吗?我将不胜感激!

知道了!谢谢,我修正了这个错误。

但是,现在我收到此错误:

2012-06-21 10:47:16.779 BulletTime[2416:707] ButtonIndex 0,信息应发送至此处。2012-06-21 10:47:19.913 BulletTime [2416:707] BTM:尝试连接到设备“Grace 的 iPad”A4:67:06:F3:EC:2A 2012-06-21 10:47 上的服务 0x00000800: 20.929 BulletTime[2416:707] BTM:连接到设备“Grace 的 iPad”A4:67:06:F3:EC:2A 上的服务 0x00000800 成功 2012-06-21 10:47:22.029 BulletTime[2416:707] -[DataHandler selectorToPerformWhenConnectionWasStablished:]:无法识别的选择器发送到实例 0x1303f0 2012-06-21 10:47:22.032 BulletTime[2416:707] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[DataHandler selectorToPerformWhenConnectionWasStablished:]:发送了无法识别的选择器到实例 0x1303f0' *第一掷调用堆栈:(0x356c188f 0x37a68259 0x356c4a9b 0x356c3915 0x3561e650 0x356207d3 0x6c693 0x351cf4ff 0x3568d547 0x35619097 0x351433eb 0x6ce1f 0x3069612f 0x356201fb 0x351e4747 0x35695ad3 0x3569529f 0x35694045 0x356174a5 0x3561736d 0x372b3439 0x33123cd5 0x6b2df 0x6b284)终止叫做抛出一个异常

4

2 回答 2

2
if (delegateToCall && [delegateToCall respondsToSelector:selectorToCall])

    [delegateToCall performSelector:selectorToCall];

和同样的方法错误

- (void)cancelInfo:(id)sender {
    [mainViewController dismissModalViewControllerAnimated:NO];
    [delegateToCall performSelector:@selector(selectorToCall:)];    
}

需要更换为

- (void)cancelInfo:(id)sender {
    [mainViewController dismissModalViewControllerAnimated:NO];
    [delegateToCall performSelector:selectorToCall];    
}

更新:

在文件 Device.m 中的方法相同的错误:

- (void)triggerConnectionSuccessfull:(NSNotification *)notification

替换字符串

[delegateToCallAboutConnection performSelector:@selector(selectorToPerformWhenConnectionWasStablished:)];

串起来

[delegateToCallAboutConnection performSelector:selectorToPerformWhenConnectionWasStablished];

和方法

- (void)triggerConnectionFailed:(NSNotification *)notification

也有同样的错误

于 2012-06-21T14:45:32.363 回答
0

CameraDataProvider您正在github 源代码的第 105 行或第 110 行设置成员变量 selectorToCall 。这意味着您在 performSelector 调用结束时不需要冒号。

而不是寻找在 selectorToCall 中设置的选择器,

 [delegateToCall performSelector:@selector(selectorToCall:)];

正在 DataHandler 上寻找一种方法,其名称selectorToCall采用一个参数(因为冒号)。

于 2012-06-21T14:49:01.097 回答