2013-10-29 2 views
1

여러 BLE 앱을 구축 중이며 내 BLE 프로토콜 및 외부 공급 업체에서이 문제가 발생했습니다. 대부분의 경우 BLE은 의도 한대로 작동하지만 때로는 특정 주변 장치에 대한 서비스를 찾지 못해서 전화기를 다시 시작하거나 재설정 할 때까지 다시 작동하지 않습니다.xcode 5 CoreBluetooth가 주변기기에 대한 서비스를 찾지 못했습니다.

누구든지이 문제가 발생 했습니까?

주변 기기를 다 처리하면 관리자가 closePeripheralConnection 메소드를 호출합니다. 관련 코드 :

// Disconnect from peripheral 
- (void)closePeripheralConnection 
{ 
    NSLog(@"== closePeripheralConnection =="); 
    // If the peripheral is connected 
    if (self.peripheral.state == CBPeripheralStateConnected && self.peripheral != nil) { 
     // Cancel connection 
     [self.manager cancelPeripheralConnection:self.peripheral]; 
    } else { 
     [self clearPeripheralSettings]; 
    } 
} 

// Clear peripheral settings 
- (void)clearPeripheralSettings 
{ 
    // Clear peripheral variables 
    self.peripheral = 0; 
    // Clear services 
    self.service = 0; 
    // Clear characteristic values 
    self.data = 0; 
    self.notifyCharacteristic = 0; 
} 

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error 
{ 
    [self clearPeripheralSettings]; 
} 
+0

를 적어주세요 귀하의 사용 시나리오를이를 추가 할 수 있습니다. 그러나 iOS BLE 스택은 쉽게 "limbo"에 들어가 완전히 작동을 멈출 수 있습니다. – allprog

+0

@allprog 제가 개발할 때, 저는 종종 내 주변 장치를 연결/연결 해제하고 있습니다. 주변 장치는 사용자가 주변 장치에서 연결을 시작할 때 앱에 공급하는 변경 데이터를 포함합니다. 관리자 (내 응용 프로그램의 한보기에있는 개체)는 데이터 수신을 마칠 때까지 주변 장치와의 세션을 유지합니다. 이 시점에서 연결을 취소하고 사소한 정리를 수행합니다. 관리자가 세션을 해체하는 방법에 대한 최신 업데이트 된 질문을 참조하십시오. – abriggs

+0

@abriggs : 위의 문제에 대한 해결책을 얻었습니까? –

답변

2

코드 및 사용자 의견에 따르면 나쁘지는 않습니다. 그것은 당신의 작업을 방해하는 핵심 블루투스 프레임 워크의 불안정성입니다. iOS 6에서는 이러한 문제가 iOS 7보다 더 많이 발생했지만 심각한 스트레스로 인해 여전히 문제가 해결되었습니다. Apple Developer Forum과 bluetooth-dev 메일 링리스트는 유사한 보고서로 가득합니다. 테스트하는 동안 사용하는 종류가 일상적으로 사용하지 않는 경우 최종 사용자에게 문제가되지 않을 수도 있습니다. (그래도 여전히 성가시다.)

통계를 수집하는 것이 좋습니다. 각 API를 호출하는 횟수를 등록하고 프레임 워크가 여전히 불안정하다는 Apple의 증명을 확인하십시오. NSUserDefaults에 통계를 저장하는 것이 가장 쉬운 방법 일 수 있습니다.

오작동의 증거가 될 수있는 강력한 데이터가 있다면 어쨌든 버그를 Apple에보고하고 개발자 포럼에 게시하여 bluetooth-dev 목록에 메일을 보내십시오. 가능한 한 많은 사람들이 당신의 소리를 듣게하십시오.

+1

+1, 조언 해 주셔서 감사합니다. 애플이 여전히 BLE을 올바르게 작동시키지 못하는 것은 수치스러운 일이다. 적어도 BLE 스택을보다 잘 제어 할 수있는 능력을 제공해야합니다. 나는 해결책을 찾기 위해 낙천적으로 찾고 있기 때문에 당신의 답을 아직 받아 들여지지 않은 것으로 표시하지 않았다. 그러나 더 합의가 없다면 나는 당신에게 소품을 줄 것이다. – abriggs

+0

저는 BLE로 꽤 오래 동안 사용 해왔고 다른 대안을 찾을 수 있다면 가장 행복 할 것입니다. – allprog

+0

차가움. TSI 중 하나를 Apple과 함께 사용했습니다. 그들이 나에게 돌아올 때 나는 갱신 할 것이다. – abriggs

0

언제이 메서드를 호출합니까? - closePeripheralConnection

당신은 아마 더 자세히 중앙 관리자 콜백 대표 하나에 대한 연결에 서비스를 발견하고 주변을 요청

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

    NSLog(@"peripheral: %@ state: %@", peripheral.name, peripheral.state == CBPeripheralStateConnected ? @"Connected" : @"Disconnected"); 

    if (peripheral.state == CBPeripheralStateConnected) { 
     peripheral.delegate = self; 
     [peripheral discoverServices:nil]; 
    } 

} 
관련 문제