ios 如何让一个方法在运行前先判断是否符合条件,符合就运行,否则等待符合条件再去运行

发布于 2022-09-01 07:21:05 字数 1295 浏览 12 评论 0

在做蓝牙的项目,一个单片机需要调用OC的收发方法,发送没问题了,但是读取蓝牙返回数据的时候,那个数据还没有接收到,我要如何做才能让他等待接收到数据后再去运行?

这是读取蓝牙广播的数据的方法

- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
    if (error)
    {
        NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error);
        return;
    }
    else
    {
        [self.lock lock];
        NSLog(@"\n准备查看收到的数据");
        //接受的数据
        NSData*receiveData= [NSData dataWithData:characteristic.value];
        //把收到的数据保存到数组
        [self.array addObject:receiveData];
        //对存储在数组里的
        [self.lock unlock];
    }   
}

/**
 *  读取数据
 */
-(void)receiveData
{
            NSLog(@"查看收到的数据");
           //从数组里取出保存的数据,然后放到属性里
            ble.readData = [self.array firstObject];
            NSString * str = [self hexStringFromData:ble.readData];
            [self.array removeObjectAtIndex:0];
            NSLog(@"\n~~~~~~~~~~~~~\n收到的数据%@\n~~~~~~~~~~~~~~~~\n",str);
}

//这是下位机调用的函数
int readData(unsigned char* buf, int maxlen)
{
    //在这里ble.readData还没有值,我想让他有值后再去执行下面的return什么的,请教要怎么做
            buf = (unsigned char *)[ble.readData bytes];
            int len = [ble.readData length];

            return len;
}


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

单身狗的梦 2022-09-08 07:21:05

修改 增加successedBlock:(void (^)(int len))getDataBlock

- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic successedBlock:(void (^)(int len))getDataBlock
 error:(NSError *)error
{
    if (error)
    {
        NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error);
        return;
    }
    else
    {
        [self.lock lock];
        NSLog(@"\n准备查看收到的数据");
        //接受的数据
        NSData*receiveData= [NSData dataWithData:characteristic.value];
        //处理数据
        int length = .......
        if(getDataBlock) {
            getDataBlock(length);
        }
        //对存储在数组里的
        [self.lock unlock];
    }   
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文