CoreBlueTootch的实现

iOS 项目集成支付宝SDK的经典错误 如下,集成好支付宝SDK后在真机上运行报错: ld: '/Users/wangshuai1/Desktop/aliPaySDKPritical/aliPaySDKPritical/ALiPay/AlipaySDK.framework/AlipaySDK' does not contain bitcode. You must rebuild it with bitcode enab 阅读详情



storyBoard里拖tableView、tableViewCell。记得拖代理


大致思路:注册中心管理设备—》判断蓝牙是否开启——>扫描—》扫描发现设备—》加到数组里,刷新—》点击cell、连接结束扫描—》连接上外设、连接出错、断开连接三个方法。



#import "ViewController.h"

#import <CoreBluetooth/CoreBluetooth.h>

#import <CoreLocation/CoreLocation.h>


@interface ViewController ()<CBCentralManagerDelegate,UITableViewDataSource, UITableViewDelegate>

//展示外设

@property (weak, nonatomic) IBOutlet UITableView *tableView;


//中央设备管理者

@property (nonatomic, strong)CBCentralManager *mgr;

//用于添加扫描到的外设

@property (nonatomic, strong)NSMutableArray *dataArr;




@end


@implementation ViewController


- (void)viewDidLoad {

    

    

    [super viewDidLoad];

    //判断中央设备蓝牙状态

    

    //tableview注册

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

    self.mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

//    NSLog(@"%@", self.mgr);

    

    // Do any additional setup after loading the view, typically from a nib.

}


// 扫描外设

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

{

    //将外设对象加到容器里

    [self.dataArr addObject:peripheral];

    [self.tableView reloadData];

    NSLog(@"%@", RSSI);

    NSLog(@"%@", advertisementData);

}


// 这个方法是必须执行的!!!!!!!!!!

- (void)centralManagerDidUpdateState:(CBCentralManager *)central

{

    NSLog(@"------%ld", central.state);

    // 判读是否是枚举。如果是,就开始扫描

    if ([self panduan]) {

        [self.mgr scanForPeripheralsWithServices:nil options:nil];

    }

    

}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

    return 1;

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    return _dataArr.count;

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    CBPeripheral *peripheral = (CBPeripheral *)self.dataArr[indexPath.row];

//    cell.textLabel.text = @"nnnnnn";

//    cell.textLabel.text = [NSString stringWithFormat:@"%@", peripheral.RSSI];

    

    return cell;

}


// 点击cell出发的方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    //链接蓝牙外设

    [self.mgr connectPeripheral:((CBPeripheral *)self.dataArr[indexPath.row]) options:nil];

    //结束扫描

    [self.mgr stopScan];

}


//链接上外设

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral

{

    NSLog(@"%s", __func__);

}


//链接出错

- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

    NSLog(@"%s", __func__);

}


// 断开连接

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

    NSLog(@"%s", __func__);

}



//承载容器的懒加载

- (NSMutableArray *)dataArr

{

    if (!_dataArr) {

        _dataArr = [NSMutableArray array];

    }

    return _dataArr;

}






//判断蓝牙状态是否可用

- (BOOL)panduan

{

    NSLog(@"%@", self.mgr);

    if (self.mgr.state == CBCentralManagerStatePoweredOn) {

        return YES;

    }

    return NO;

}




- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end






#import "ViewController.h"

#import <CoreBluetooth/CoreBluetooth.h>

#import <CoreLocation/CoreLocation.h>


@interface ViewController ()<CBCentralManagerDelegate,UITableViewDataSource, UITableViewDelegate>

//展示外设

@property (weak, nonatomic) IBOutlet UITableView *tableView;


//中央设备管理者

@property (nonatomic, strong)CBCentralManager *mgr;

//用于添加扫描到的外设

@property (nonatomic, strong)NSMutableArray *dataArr;




@end


@implementation ViewController


- (void)viewDidLoad {

    

    

    [super viewDidLoad];

    //判断中央设备蓝牙状态

    

    //tableview注册

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

    self.mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

//    NSLog(@"%@", self.mgr);

    

    // Do any additional setup after loading the view, typically from a nib.

}


// 扫描外设

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

{

    //将外设对象加到容器里

    [self.dataArr addObject:peripheral];

    [self.tableView reloadData];

    NSLog(@"%@", RSSI);

    NSLog(@"%@", advertisementData);

}


// 这个方法是必须执行的!!!!!!!!!!

- (void)centralManagerDidUpdateState:(CBCentralManager *)central

{

    NSLog(@"------%ld", central.state);

    // 判读是否是枚举。如果是,就开始扫描

    if ([self panduan]) {

        [self.mgr scanForPeripheralsWithServices:nil options:nil];

    }

    

}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

    return 1;

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    return _dataArr.count;

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    CBPeripheral *peripheral = (CBPeripheral *)self.dataArr[indexPath.row];

//    cell.textLabel.text = @"nnnnnn";

//    cell.textLabel.text = [NSString stringWithFormat:@"%@", peripheral.RSSI];

    

    return cell;

}


// 点击cell出发的方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    //链接蓝牙外设

    [self.mgr connectPeripheral:((CBPeripheral *)self.dataArr[indexPath.row]) options:nil];

    //结束扫描

    [self.mgr stopScan];

}


//链接上外设

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral

{

    NSLog(@"%s", __func__);

}


//链接出错

- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

    NSLog(@"%s", __func__);

}


// 断开连接

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

    NSLog(@"%s", __func__);

}



//承载容器的懒加载

- (NSMutableArray *)dataArr

{

    if (!_dataArr) {

        _dataArr = [NSMutableArray array];

    }

    return _dataArr;

}






//判断蓝牙状态是否可用

- (BOOL)panduan

{

    NSLog(@"%@", self.mgr);

    if (self.mgr.state == CBCentralManagerStatePoweredOn) {

        return YES;

    }

    return NO;

}




- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end











MobaXterm终端工具个人学习版安装包及常用配置备份 资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。 立即下载

相关推荐

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

加载webView 内存泄露 导致内存暴涨的几种解决方案

加载webView导致内存泄露的原因是:Html中的js代码会引起内存泄露 解决这个问题的方法是在webViewDidFinishLoad方法中设置如下: ***************     [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];  

iOS_Cloud的博客 1万+

科技中介服务机构如何借助平台提升技术撮合服务的专业性与响应速度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

使UITextView不换行

//UITextFieldDelegate代理里面响应return键的回调:textFieldShouldReturn:。 //但是 UITextView的代理UITextViewDelegate 里面并没有这样的回调。 //但是有别的方法可以实现: //UITextViewDelegate里面有这样一个代理函数: - (BOOL)textView:(UITextView

iOS_Cloud的博客 7343

产业园区如何利用AI技术提升科技成果转化服务的响应速度与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

11232131231231是的

11232131231231是的

枚举和字符串的相互转化

enum DPodRecordType{     un_pay         = 0,     un_ext_pay     = 1,     has_pay        = 2,     artisan_start  = 3,     service_begin  = 4,     service_finish = 5,     cancel         = 6,    

iOS_Cloud的博客 6912

差分运放电路输出电压偏置设计解析

差分运算放大电路是信号处理中的基础模块,通过差分对管结构实现共模抑制与差模放大。其核心原理基于运放的虚短虚断特性,当电阻网络满足对称条件时,输出电压与输入差分成正比。在工业测量系统中,由于ADC通常仅支持正电压输入,需要通过偏置电路将双极性信号平移至正电压范围。典型设计采用精密基准电压源和匹配电阻网络,既保持信号完整性又满足系统接口要求。本文以-100V高压测量为例,详细解析了分压网络设计、参考电压选取以及电阻匹配等关键技术要点,为传感器接口电路设计提供实践参考。

weixin_35750747的博客 470

too many arguments to function call, expected 0, have 3 错误‘解决办法

引用MJRefresh报错的解决办法: too many arguments to function call, expected 0, have 3  这是编译的错 Build Setting--> Apple LLVM 6.0 - Preprocessing--> Enable Strict Checking of objc_msgSend Calls  改为 NO 如果改后

iOS_Cloud的博客 5818

BAPI_OUTB_DELIVERY_CHANGE扩展指南:利用EXTENSION2与SMOD_V50B0001实现自定义字段更新

本文详细解析了如何利用BAPI_OUTB_DELIVERY_CHANGE的EXTENSION2参数与增强点SMOD_V50B0001,在不修改标准代码的前提下,安全、标准地更新SAP交货单的自定义字段。通过清晰的步骤指南和实战代码示例,帮助开发者掌握通过增强字段实现定制化业务需求的完整流程与调试技巧。

fanta的博客 451

属性基加密(Attribute-based Encryption, ABE)

KP-ABE中,用户的密钥定义了访问策略,密文的属性与策略进行匹配。CP-ABE中,密文定义了访问策略,用户的属性与策略进行匹配。

2201_75392924的博客 1830

iOS9 在 iOS9 中现在找不到 XXX.dylib 了,比如libz.tbd

1. Build Phases >Link Binary with Librairies > + > Add other 2.然后 cmd + shift + G  前往 :/usr/lib/ ok ,这时你会发现有大量的 .dylib 或.tbd 等等 想加哪个加哪个

iOS_Cloud的博客 3899

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 401

"_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from: objc-class-ref in libWeChatSDK.a(MTA

集成微信支付SDK报错:  "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:       objc-class-ref in libWeChatSDK.a(MTA  导入CoreTelephony.framework 开发文档上并没有说明,好坑

iOS_Cloud的博客 3092

A B C三个气象站的小波分析结果解读

在小波分析的过程中,信号的不同频率分量会在不同的尺度上显现,而纵轴上的数值表示信号在相应尺度上的强度或能量。2. **小波方差的横轴(水平轴)**:横轴上的尺度表示用于分析的小波函数的尺度。1. **共同趋势:** 在所有三个点的小波方差图中,随着尺度的增加,方差逐渐增大,尤其是在较大的时间尺度上。3. **尺度30的特殊性:** 在所有点的小波方差图中,尺度30似乎是一个特殊的点,对应着一个较长的时间尺度上的波动或变化。2. **方差的大小:** 方差的大小反映了在相应尺度下信号的波动强度。

weixin_44259522的博客 859

Qoder CN 完全指南:阿里云AI智能体的全景拆解

阿里云旗下AI编程助手"通义灵码"于2026年5月20日升级为QoderCN,转型为覆盖软件开发与办公场景的AI智能体产品矩阵。该平台具备四大核心能力:代码补全、智能问答、文件编辑和智能体模式,支持GLM、DeepSeek等多模型切换。特色功能包括Quest2.0任务委派、专家团协作和记忆感知,满足金融、政务等行业的合规需求。产品形态涵盖IDE插件、CLI工具、办公助手和数字员工,形成"全家桶"式解决方案。相比Cursor等海外产品,QoderCN更注重全链路覆盖,个

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 938

Please verify that your device’s clock is properly set, and that your signing certificate is not exp

真机调试的时候出现此类警告,之前也遇到过,可是一直没总结,今天总结一下 出现这种问题大概有两个解决方法: 1.最简单的一种----如果你的证书是最近才申请的没什么问题,或者说前几天测试还没问题,突然不能用了,简单!把手机上的现有项目版本删掉,clean一下重新运行,应该就解决了。 2.证书出了问题。重新申请证书,不过,一般情况下感觉不会出现这种问题

iOS_Cloud的博客 3001

【清华大学软院】15-19年推免试题历年整理

整理的题目为清软预推免机试(外校)硕士机考题目。 年代 题目1 题目2 题目3 2019 质因数分解 二叉搜索树 区间DP(折叠字符串) 2018 日期转换 高精度模拟 区间DP(戳气球) 2017 进制素数 被遗漏的数字 DP(收集苹果) 2016 大数运算 DP DFS 2015 进制素数: http://acm.hdu.edu.cn/showproblem.php?pid=1230 2017年题目(这个是找的最准确的题目): 1题见【链接】 2题见【链接】

云端筑梦师 2255

使用sourceTree遇到的一个问题

1.在团队开发时,如果你写完代码 高高兴兴的push了,,然后发现有问题,,这是组长把你的打回 你abandon后 想回滚到某一个分支 点击这个分支右键----reset developer to this commit   如果 只是想回滚到这个分支 自己在本地更改的代码还想保留 选项如下图 如果回滚到指定分支,并且自己在本地改的代码也放弃不要了。那么选择如下 选

iOS_Cloud的博客 2659

各大厂薪资对比爬虫:Python采集OfferShow爆料数据

print(f"⚠️ API返回错误码: {data.get('code')}, msg: {data.get('msg')}")ax.set_title('各大厂薪资对比 (基于OfferShow爆料数据)', fontsize=16, fontweight='bold')stats.columns = ['人数', '平均年薪', '年薪中位数', '年薪标准差', '平均月薪', '平均月数']print(analyzer.get_position_stats('字节跳动').head(10))

2201_76125261的博客 603

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

svn版本控制的Xcode工程打不开 ,报 the file cannot open错误 的解决办法

当使用svn update或提交代码发生冲突时候,xcode工程文件会出现打不开的情况,出现这样的提示:XXX.xcode xcodeproj cannot be opened 。        因为.xcodeproj工程文件冲突了,然后还是会强制更新,内部文件出现了冲突,所以解析不了文件。解决方法如下:        1. 右键点击.xcodeproj,选择显示包内容;      2.

iOS_Cloud的博客 2474

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

给 UIButton、UILabel添加下划线

1.给UIButton添加下划线         UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, 25)];         [button setTitleColor:[UIColor blackColor] forState:UIControlStateNo

iOS_Cloud的博客 2371

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

swift学习笔记(一)(常量、变量、数据类型、字符串的拼接、数组、字典)

import Foundation print("wangshuai") // 1.var 变量 // 当指定一个变量的时候就不可以再指定了,比如 var a = 1 虽然修饰的a可以改变但是只能像下面那样写(a = 3),而不是再写个 var a = 3 var a = 1 var b = 2 a = 3 b = 3

iOS_Cloud的博客 2059

iOS 自动化打包测试(使用jenkins、Tomcat、JDK实现)

大家知道,一般的打包测试比较简单,都是打成ipa包 ,大致流程就是 在工程里找到product文件夹下的.app文件 showInFunder后将其拖到iTunes里 再拖出来,ok 生成的ipa包就是这样普通打包测试的包。 !!!!!今天,主要记录一下自动化打包测试的步骤!!!!!   共勉~ #如何自动打包上传App *** ##一、安装

iOS_Cloud的博客 1720

运行程序报错:the file"xxx"couldn't be open because you don't have permisslion to view it

废话不多说,直接上解决方案:在Build settings->Product Name项修改.    Product Name项默认是$(TARGET_NAME),    改个名字再运行就OK了。

iOS_Cloud的博客 1698

ReactNative的环境配置和初步使用(超详细)

ReactNative的环境配置和初步使用 1.打开终端  输入 brew -v 查看是否安装homeBrew  我 这里已经安装过了。 2.如果没安装,输入网址 brew.sh 才、拷贝ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 放到终端

iOS_Cloud的博客 1315
上一篇: xmpp的一些常识
下一篇: 支付功能实现的大致思路
Magical_master
博客等级 码龄11年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值