在ios中将_NSInlineData转换为Nsstring

时间:2014-10-29 16:49:52

标签: ios

我正在尝试从父字符串中获取子字符串。 parent string是字典中可用设备的mac地址。但是,当我尝试转换它时,它给我的错误如下“[_NSInlineData substringFromIndex:]:无法识别的选择器发送到实例”。

我只是想从父字符串中删除一些字符(这里是像“< 0001ui3 234563>”这样的mac地址)并获取“ui3 234563”。

   // This is my nsdictionary.
  advertisementdata = {     kCBAdvDataIsConnectable = 1;     kCBAdvDataLocalName = "test123";     kCBAdvDataManufacturerData = <00029r21 6y051rt2>;     kCBAdvDataServiceUUIDs =     (         FFF0     );     kCBAdvDataTxPowerLevel = 0; }

 // I want 9r216y051rt from kCBAdvDataManufacturerData;
 NSString *str2;


 str2=[advertisementData objectForKey:@"kCBAdvDataManufacturerData"];

 NSString *str3;
 str3=[str2 substringFromIndex:5];

 // here I do not get the required 12 character string from str2 string.

 get NSInlinedata error for all NSString method.

谢谢,

3 个答案:

答案 0 :(得分:2)

请注意,iOS CoreBlueTooth advertisementData是二进制NSData:

https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManagerDelegate_Protocol/index.html#//apple_ref/doc/constant_group/Advertisement_Data_Retrieval_Keys

文件明确指出:

CBAdvertisementDataManufacturerDataKey
A NSData object containing the manufacturer data of a peripheral.

BTW,当你有一个NSDictionary值类型NSData *时,你会通过将这个NSData转换为NSString *来获得错误*

//这是一个错误!

  

NSString * str2 = [advertisementData objectForKey:@&#34; kCBAdvDataManufacturerData&#34;];

要检查字典值,请尝试

NSData* advData = [advertisementData objectForKey:@"kCBAdvDataManufacturerData"];

不幸的是,由于这是二进制文件,因此您需要根据外围设备制造商的数据文档对其进行解释。没有简单的方法可以将其转换为NSString *

答案 1 :(得分:1)

听起来你有一个NSData对象,并且你正在尝试使用NSString方法来访问它。您可以使用调用initWithData: encoding:转换NSData对象 然后将substringFromIndex调用应用于新的NSString。

答案 2 :(得分:0)

您拥有NSInlineData的要点是数据对象的十六进制表示。

第一步应该以属性列表格式获取数据对象内容的十六进制表示形式。

 NSData *datakCBAdvDataManufacturerData = [advertisementData valueForKey:@"kCBAdvDataManufacturerData"];
 NSString *strmanufacturerData      = datakCBAdvDataManufacturerData.description;
 NSString *ChkStr = [strmanufacturerData substringWithRange:NSMakeRange(10, 8)];//depends upon your requirement.
 NSLog(@"%@",ChkStr);

 unsigned int outVal;
 NSScanner* scanner = [NSScanner scannerWithString:ChkStr];
 [scanner scanHexInt:&outVal];
 NSLog(@"%@",outVal);

此outVal变量将包含您需要的值。