初始化 CBService 时出错
Error initializing CBService
我有一个以前工作的 iPhone 应用程序,它使用蓝牙 LE 配件并且是我通过修改示例源代码创建的。
在 Xcode 和 IOS 的无数更新中,由于我无法调试的原因,它已停止构建。
与初始化CBService有关。
在线建设崩溃,说'init'不可用:
CBService *gattDBService=[[CBService alloc] init];
反过来指向 CBAttribute.h 中的这一行:
- (instancetype) init NS_UNAVAILABLE;
我现在使用的是 XCode 7.0,项目设置为 7.1 的部署目标。
为什么这个项目开始这样做?
谢谢,
戴尔
更多代码片段(重新向轮播添加服务):
-(void)prepareCarouselList
{
NSArray *allService = [self UUIDArray:[[[CBManager sharedManager] serviceUUIDDict] allKeys]];
if (proximityServices)
{
[proximityServices removeAllObjects];
}
if (findMeServices)
{
[findMeServices removeAllObjects];
}
// Check for sensor hub
for (CBService *service in [[CBManager sharedManager] foundServices])
{
if ([service.UUID isEqual:BAROMETER_SERVICE_UUID])
{
[carouselArray addObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:[service.UUID.UUIDString lowercaseString]]];
[carousel_ServiceArray addObject:service];
isSensorHubFound = YES;
break;
}
}
if (!isSensorHubFound)
{
for(CBService *service in [[CBManager sharedManager] foundServices])
{
if([allService containsObject:service.UUID])
{
NSInteger ServiceKeyIndex = [allService indexOfObject:service.UUID];
CBUUID *keyID = [allService objectAtIndex:ServiceKeyIndex];
if([service.UUID isEqual:CAPSENSE_SERVICE_UUID] || [service.UUID isEqual:CUSTOM_CAPSENSE_SERVICE_UUID])
{
[self checkCapsenseProfile:service];
}
else if(![self checkFindMeProfile:service])
{
if ([service.UUID isEqual:IMMEDIATE_ALERT_SERVICE_UUID])
{
[findMeServices addObject:service];
}
[carouselArray addObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:[keyID.UUIDString lowercaseString]]];
[carousel_ServiceArray addObject:service];
}
}
else
{
NSDictionary *tempDict = [[NSDictionary alloc] initWithObjectsAndKeys:@"unknown",k_SERVICE_IMAGE_NAME_KEY,[ResourceHandler getServiceNameForUUID:service.UUID],k_SERVICE_NAME_KEY, nil];
[[[CBManager sharedManager] serviceUUIDDict] setValue:tempDict forKey:[service.UUID.UUIDString lowercaseString]];
[carouselArray addObject:tempDict];
[carousel_ServiceArray addObject:service];
}
}
}
//To add GATT DB item
[self addGattDBCarouselItem];
if([carouselArray count])
{
[self initCarousel];
}
}
/*!
* @method addGattDBCarouselItem
*
* @discussion Method to add GATTDB carousel item
*
*/
-(void)addGattDBCarouselItem
{
[carouselArray insertObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:GENERIC_ACCESS_SERVICE_UUID] atIndex:0];
CBService *gattDBService=[[CBService alloc] init];;
[carousel_ServiceArray insertObject:gattDBService atIndex:0];
}
您不能创建 CBService
的实例 - 此对象的实例在服务发现后从 CBPeripheral
的 services
属性 中检索。
如果您想将服务作为外围设备发布,则必须实例化一个 CBMutableService
实例。
CBService 没有 init 方法,但 CBMutableService 有。试试这个:
-(void)addGattDBCarouselItem
{
[carouselArray insertObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:GENERIC_ACCESS_SERVICE_UUID] atIndex:0];
NSString *keyAtIndex = [[[[CBManager sharedManager] serviceUUIDDict] allKeysForObject:carouselArray[0]] objectAtIndex:0];
CBUUID *keyID = [CBUUID UUIDWithString:keyAtIndex];
CBMutableService *gattDBService=[[CBMutableService alloc] initWithType:keyID primary:YES];
[carousel_ServiceArray insertObject:gattDBService atIndex:0];
}
我有一个以前工作的 iPhone 应用程序,它使用蓝牙 LE 配件并且是我通过修改示例源代码创建的。
在 Xcode 和 IOS 的无数更新中,由于我无法调试的原因,它已停止构建。
与初始化CBService有关。
在线建设崩溃,说'init'不可用:
CBService *gattDBService=[[CBService alloc] init];
反过来指向 CBAttribute.h 中的这一行:
- (instancetype) init NS_UNAVAILABLE;
我现在使用的是 XCode 7.0,项目设置为 7.1 的部署目标。
为什么这个项目开始这样做? 谢谢, 戴尔
更多代码片段(重新向轮播添加服务):
-(void)prepareCarouselList
{
NSArray *allService = [self UUIDArray:[[[CBManager sharedManager] serviceUUIDDict] allKeys]];
if (proximityServices)
{
[proximityServices removeAllObjects];
}
if (findMeServices)
{
[findMeServices removeAllObjects];
}
// Check for sensor hub
for (CBService *service in [[CBManager sharedManager] foundServices])
{
if ([service.UUID isEqual:BAROMETER_SERVICE_UUID])
{
[carouselArray addObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:[service.UUID.UUIDString lowercaseString]]];
[carousel_ServiceArray addObject:service];
isSensorHubFound = YES;
break;
}
}
if (!isSensorHubFound)
{
for(CBService *service in [[CBManager sharedManager] foundServices])
{
if([allService containsObject:service.UUID])
{
NSInteger ServiceKeyIndex = [allService indexOfObject:service.UUID];
CBUUID *keyID = [allService objectAtIndex:ServiceKeyIndex];
if([service.UUID isEqual:CAPSENSE_SERVICE_UUID] || [service.UUID isEqual:CUSTOM_CAPSENSE_SERVICE_UUID])
{
[self checkCapsenseProfile:service];
}
else if(![self checkFindMeProfile:service])
{
if ([service.UUID isEqual:IMMEDIATE_ALERT_SERVICE_UUID])
{
[findMeServices addObject:service];
}
[carouselArray addObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:[keyID.UUIDString lowercaseString]]];
[carousel_ServiceArray addObject:service];
}
}
else
{
NSDictionary *tempDict = [[NSDictionary alloc] initWithObjectsAndKeys:@"unknown",k_SERVICE_IMAGE_NAME_KEY,[ResourceHandler getServiceNameForUUID:service.UUID],k_SERVICE_NAME_KEY, nil];
[[[CBManager sharedManager] serviceUUIDDict] setValue:tempDict forKey:[service.UUID.UUIDString lowercaseString]];
[carouselArray addObject:tempDict];
[carousel_ServiceArray addObject:service];
}
}
}
//To add GATT DB item
[self addGattDBCarouselItem];
if([carouselArray count])
{
[self initCarousel];
}
}
/*!
* @method addGattDBCarouselItem
*
* @discussion Method to add GATTDB carousel item
*
*/
-(void)addGattDBCarouselItem
{
[carouselArray insertObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:GENERIC_ACCESS_SERVICE_UUID] atIndex:0];
CBService *gattDBService=[[CBService alloc] init];;
[carousel_ServiceArray insertObject:gattDBService atIndex:0];
}
您不能创建 CBService
的实例 - 此对象的实例在服务发现后从 CBPeripheral
的 services
属性 中检索。
如果您想将服务作为外围设备发布,则必须实例化一个 CBMutableService
实例。
CBService 没有 init 方法,但 CBMutableService 有。试试这个:
-(void)addGattDBCarouselItem
{
[carouselArray insertObject:[[[CBManager sharedManager] serviceUUIDDict] valueForKey:GENERIC_ACCESS_SERVICE_UUID] atIndex:0];
NSString *keyAtIndex = [[[[CBManager sharedManager] serviceUUIDDict] allKeysForObject:carouselArray[0]] objectAtIndex:0];
CBUUID *keyID = [CBUUID UUIDWithString:keyAtIndex];
CBMutableService *gattDBService=[[CBMutableService alloc] initWithType:keyID primary:YES];
[carousel_ServiceArray insertObject:gattDBService atIndex:0];
}