在iOS设备之间发送数据时委派响应选择器崩溃

时间:2012-06-21 14:27:12

标签: objective-c ios ios5

从一台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's iPad”上的服务0x00000800 A4:67:06:F3:EC:2A     2012-06-21 10:47:20.929 BulletTime [2416:707] BTM:设备连接服务0x00000800“Grace's iPad”A4:67:06:F3:EC:2A成功     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)     终止调用抛出异常

  

2 个答案:

答案 0 :(得分: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

也有同样的错误

答案 1 :(得分:0)

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

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

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

正在寻找一个名为selectorToCall的DataHandler上的方法,它接受一个参数(因为冒号)。