One*_*nDc -1 objective-c nsstring ios
为什么我在以下位置将无法识别的选择器发送到实例
doesExist = [myStr isEqualToString:@"Hello"];
- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
NSLog(@"%s", __PRETTY_FUNCTION__);
NSLog(@"Found %d peripheral as a result of scanning", myListOfPeripherals.count);
NSString *strMACId = [advertisementData valueForKey:@"kCBAdvDataManufacturerData"];
NSLog(@"%@", strMACId);
[timerConnectionTimeout invalidate];
PeripheralCell * objPeripheralCell;
NSLog(@"Found Peripheral with Name: %@ RSSI data:%@ AdvData: %@", peripheral.name, peripheral.RSSI, advertisementData);
// Check if the Peripheral already exists in your collection - if no add it.
if ([self peripheralExistsWithMacId:strMACId] == false)
{
// New peripheral - Add it to the list of myPeripherals
objPeripheralCell=[[PeripheralCell alloc] init];
[myListOfPeripherals addObject: objPeripheralCell];
objPeripheralCell.peripheral=peripheral;
objPeripheralCell.rssi=RSSI;
objPeripheralCell.peripheralMacId = strMACId;
}
}
-(BOOL) peripheralExistsWithMacId:(NSString *)strMacId
{
BOOL doesExist = false;
for (int i=0; i<myListOfPeripherals.count; i++)
{
PeripheralCell *objPeripheralCell = myListOfPeripherals[i];
NSString *myStr = objPeripheralCell.peripheralMacId;
NSLog(@"Comparing %@ with %@", myStr, strMacId);
**doesExist = [myStr isEqualToString:@"Hello"];**
if (doesExist)
{
break;
}
}
return doesExist;
}
Run Code Online (Sandbox Code Playgroud)
错误->> -[NSConcreteData isEqualToString:]: unrecognized selector sent to instance 0x7970e90
更新:NSLog(@“%@”,strMACId)产生<00ff6e62 61bacad8>如何确定这不是NSString对象
您的代码行:
[advertisementData valueForKey:@"kCBAdvDataManufacturerData"];
Run Code Online (Sandbox Code Playgroud)
返回一个NSConcreteData,并将其分配给NSString类型的指针。您未在Xcode中收到任何代码错误的原因是,它认为您知道在分配给特定类型的指针时在做什么。然后,它会看到您正在调用isEqualToString一个它认为是NSString的指针,从而认为该调用完全是逻辑和功能。如果添加了一行代码(或什至是NSLog),则检查对象是否实际上是NSString,您会发现它不是。
if([strMACId isKindOfClass:[NSString class]])
{
//This will return false for your case, and never get in here
}
Run Code Online (Sandbox Code Playgroud)
您需要做的是从NSDictionary中读取值,然后将其转换为NSString对象。您可以使用类似:
NSString* newStr = [[NSString alloc] initWithData:theData
encoding:NSUTF8StringEncoding]
Run Code Online (Sandbox Code Playgroud)
但是,您将必须谨慎对待编码。有一些方法可以遍历编码样式,直到获得一种可以毫无错误地解码NSData的方法为止,但是我不确定您的数据是否可以正确解码为NSString。另一个选择是将PeripheralCell.peripheralMacIdNSData 的类型更改为NSData并比较数据以获得所需的内容。
| 归档时间: |
|
| 查看次数: |
2857 次 |
| 最近记录: |