IOS:当用户选择行时,从表视图连接外围设备
Posted
技术标签:
【中文标题】IOS:当用户选择行时,从表视图连接外围设备【英文标题】:IOS:Connect peripheral device from table view when user select row 【发布时间】:2014-10-14 05:57:09 【问题描述】:我正在开发 corebluetooth 应用程序。当我开始在 tableview 中发现设备并且当我使用 do connect 委托方法在索引路径中选择行中选择要连接的设备时,我得到控制台中的错误,我用于发现和连接设备的代码是下面指定
用于发现外围设备
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:
(CBPeripheral
*)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
self.discoveredPeripheral = peripheral;
_logData = [NSString stringWithFormat:@"Did discover peripheral. peripheral: %@ rssi: %@,
`enter code here`UUID: %@ advertisementData: %@ ", peripheral, RSSI, peripheral.UUID,
advertisementData];
NSLog(@"%@",_logData);
[_periferalDevices addObject:peripheral.name];
[_tableView reloadData];
用于连接外围设备
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral
*)peripheral
peripheral.delegate = self;
[self.discoveredPeripheral discoverServices:nil];
NSLog(@"Peripheral Connected");
NSLog(@" started time is %@",_timestring);
// Stop scanning
//[self.centralManager stopScan];
NSLog(@"Scanning stopped");
[self.data setLength:0];
[peripheral discoverServices:nil];
[peripheral discoverServices:@[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]]];
我的困惑是在下面的代码中,在选定行中选择特定外围设备后,我们必须编写什么代码才能在表格视图中连接发现的设备。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath
if (_periferalDevices.count >0 )
CBPeripheral *peripheral =[_periferalDevices objectAtIndex:indexPath.row];
_discoveredPeripheral = peripheral;
NSLog(@"selected peripheral - %@",peripheral);
[self.centralManager connectPeripheral:peripheral options:nil];
[_periferalDevices removeObject:peripheral];
NSLog(@"selected peripheral state - %d",peripheral.state);
[tableView reloadData];
NSString *strID = [NSString stringWithFormat:@"%@",_discoveredPeripheral.identifier];
strID = [strID substringFromIndex: [strID length] - 20];
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"conected" message:@""
delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
[alert show];
i am getting the errors as specified below
2014-10-14 11:36:46.697 Bluetooth_iph[1705:368603] selected peripheral - MetaWatch 56
2014-10-14 11:36:50.385 Bluetooth_iph[1705:368603] -[__NSCFString identifier]: unrecognized
selector sent to instance 0x14e67190
2014-10-14 11:36:50.387 Bluetooth_iph[1705:368603] *** Terminating app due to uncaught
exception 'NSInvalidArgumentException', reason: '-[__NSCFString identifier]: unrecognized
selector sent to instance 0x14e67190'
*** First throw call stack:
(0x28b47f87 0x36576c77 0x28b4d37d 0x28b4b259 0x28a7cd68 0x28818c7d 0xfb6db 0x2c0dcc57
0x2c18e2d7 0x2c040449 0x2bfbc30f 0x28b0e845 0x28b0bf29 0x28b0c32b 0x28a59db1 0x28a59bc3
0x2fdbc051 0x2c025a31 0xfc57d 0x36b12aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException
我已经给了他上面的代码,但是连接外围代理方法不起作用。请帮助我提前谢谢
【问题讨论】:
哪一行给你错误。它说您正在访问 NSString 上的标识符属性(您不能这样做),所以您在某个地方混淆了外围设备和字符串 添加异常断点或查看堆栈跟踪以查看哪一行有问题。我在您在此处显示的代码中看不到问题。 你把[_periferalDevices addObject:peripheral.name];
改成[_periferalDevices addObject:peripheral];
了吗?
我也改变了这一点,但目的是得到如下错误..'NSInvalidArgumentException',原因:'-[CBPeripheral isEqualToString:]: unrecognized selector sent to instance 0x175a3ad0'
您的数组现在包含CBPeripherals
,而不是字符串,因此您需要在该行中使用peripheral.identifier
【参考方案1】:
您应该添加peripheral
对象并在cellForRowAtIndexPath
中检索名称,而不是将peripheral.name
添加到periferalDefices
数组中。那么你的didSelectRowAtIndexPath
就会和你写的一样
【讨论】:
我能够获取设备的名称,但无法连接到它,而我正在提供 [self.centralManager connectPeripheral:peripheral options:nil];在代码中 我已经更新了错误代码,请在上面找到并帮助谢谢以上是关于IOS:当用户选择行时,从表视图连接外围设备的主要内容,如果未能解决你的问题,请参考以下文章
IOS - 从表视图控制器获取值并将其发送到另一个表视图控制器
在 iOS 9 上从表视图打开 safari 视图控制器并在 iOS 8 或 7 上在 safari 中打开