2015-01-27 29 views
10

Tôi muốn sử dụng CoreBluetooth.framework trong iOS8 để đạt được độ truyền dữ liệu, tôi đã khám phá ngoại vi trong phương pháp tiếp theo và cố gắng kết nối các thiết bị ngoại vi.Tại sao sử dụng coreBluetooth connectPeripheral không gọi các phương thức ủy nhiệm trong iOS8

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{ 
    NSLog(@"Discover name : %@", peripheral.name); 
    [self.centralManager connectPeripheral:peripheral options:nil]; 
} 

Nhưng nó đã không gọi cho các phương pháp đại biểu didFailToConnectPeripheral hoặc didConnectPeripheral, tôi Waner gì sai với nó, là lỗi mã hoặc iOS8 cần một số điều thêm? Làm thế nào để đối phó với nó, cảm ơn trước!

đây là mã của tôi trong github, tôi viết Chương trình là máy chủ và một Chương trình khác là Trung tâm.

+11

Did u cố gắng lưu trữ các đối tượng ngoại vi trong một Ivar và sau đó kết nối với nó? tức là 'self.discoveredPeripheral = ngoại vi; [self.centralManager connectPeripheral: self.discoveredCác tùy chọn ngoại vi: nil]; ' –

+1

bản sao có thể có của [iOS CoreBluetooth: centralManager: didConnectPeripheral/didFailToConnectPeripheral: không nhận được gọi] (http://stackoverflow.com/questions/26377470/ios-corebluetooth- centralmanagerdidconnectperipheral-didfailtoconnectperiph) – Paulw11

+0

Nó hoạt động, cảm ơn bạn rất nhiều! – Clavis

Trả lời

3

Tôi đang sử dụng TemperatureSensor iOS sample app mà didDiscoverPeripheral không gọi. Bằng cách tham chiếu luồng của Heart Rate Monitor Mac sample app. Vui lòng đảm bảo rằng chuỗi mã chạy là:

1. centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()]; 
2. - (void) centralManagerDidUpdateState:(CBCentralManager *)central 
3. [centralManager scanForPeripheralsWithServices:... 

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:... sẽ được gọi sau đó.

9

@Sj bình luận giải quyết nó cho tôi, sao chép nó vào một câu trả lời trong trường hợp ai đó sẽ bỏ lỡ nó:

Did u cố gắng lưu trữ các đối tượng ngoại vi trong một Ivar và sau đó kết nối với nó? tức là self.discoveredPeripheral = ngoại vi; [self.centralManager connectPeripheral: self.discoveredCác tùy chọn ngoại vi: nil];

0

Chỉ gọi phương thức kết nối một lần và chờ phản hồi ủy nhiệm kết nối. Đoạn mã trên mà bạn đăng sẽ gọi phương thức kết nối thường xuyên hơn (khi nó bao giờ khám phá ra ngoại vi)

if(!self.detectedBLE){ [self.centralManager stopScan]; self.detectedBLE = peripheral; [self.centralManager connectPeripheral:self.detectedBLE options:nil]; }

Các vấn đề liên quan