【问题标题】:Calling a method from another class, variables not passed on从另一个类调用方法,变量未传递
【发布时间】:2017-04-11 16:03:19
【问题描述】:

我正在尝试将十六进制数据从 IOS 发送到蓝牙外围设备。我有一个自定义的第 3 方键盘,以便一个名为 SEND 的按钮关闭键盘并将信息从文本字段发送到称为控制的指定特征。

我有两个班级:

MRHexKeyboardBTLECentralViewController

如果我使用放置在 BTLECentralViewController 上的按钮,发送函数可以正常工作,但是当我从键盘调用发送函数时,由于没有要写入的特征,它不再工作。

在 BTLECentralViewController 中:

-(IBAction)sendCmdControl:(id)sender;{
    //When button is pressed send data
    [self sendDataCMD];

}

-(void)sendDataCMD{
    if (!_control) {
        NSLog(@"No Characteristic to write to");
        return;
    }
    //sending commandToSend to characteristic 'control'
    [self.discoveredPeripheral writeValue:commandToSend forCharacteristic:self.control type:CBCharacteristicWriteWithResponse];
}

现在当我将此表单称为键盘方法时,我会这样做

MRHex 键盘:

 BTLECentralViewController* myScript = [[BTLECentralViewController alloc] init]; 
 [myScript sendDataCMD]; 

我遇到的问题是:方法运行但没有向其发送数据的特征,因此变量没有被传递。

我相信是因为 MRHexKeyboard 类没有看到 BTLECentralViewController 中声明的子句??

@property (strong, nonatomic) CBCentralManager      *centralManager;
@property (strong, nonatomic) CBPeripheral          *discoveredPeripheral;

我如何让其他类可以访问它们??

我对 iOS 和 ObjectiveC 非常陌生。

【问题讨论】:

  • BTLECentralViewController* myScript = [[BTLECentralViewController alloc] init]。您正在创建一个全新的对象。
  • 稍微扩展一下 Larme 的评论:属性在对象实例上,而不是在类上。新视图控制器的创建(alloc 和 init)将获得一个 nil centralManager 和 foundPeripheral 属性,除非您执行某些操作来配置这些属性。我不清楚你的期望。这是非常基本的面向对象的东西。
  • @CuriousRabit -> 谢谢,我认为我严重缺乏 OO 基础知识 -> 你知道我在哪里可以找到一些好的参考资料吗...?
  • @CuriousRabbit 在我的语言中,我希望将缺少的变量设置为全局变量,以便当我从不同的文件调用此函数时,它可以看到它们。即当我调用 sendDataCMD 时,提供 centralManager 和 foundPeripheral 可见

标签: ios objective-c class core-bluetooth instances


【解决方案1】:

通过查看您的代码,我可以建议创建 CBCentralManager 和 CBPeripheral 的单例对象,因此在初始化 ViewController 时它不会为零。或者您可以创建一个 BLEManager 单例类来执行所有活动。

【讨论】:

    猜你喜欢
    • 2012-01-07
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多