2013-06-14 27 views
14

tôi tiếp tục nhận được lỗi này khi tôi chạy ứng dụng của tôi có sử dụng CoreBluetooth trên iPhone 5: <CBConcreteCentralManager: 0x2007d590> is not powered onKhi nào trạng thái của CBCentralManager sẽ được bật nhưng vẫn cho tôi cảnh báo "không bật nguồn"?

Nhưng khi tôi gọi state trên một và chỉ đối tượng CBCentralManager chương trình của tôi, nó sẽ trả 5, đó là CBCentralManagerStatePoweredOn. Vì vậy, nó được hỗ trợ trên, nhưng tôi nhận được lỗi này. Bluetooth của iPhone cũng được bật.

Nói chung, khi nào điều này sẽ xảy ra? Tôi thậm chí không biết những gì đang xảy ra khi chương trình chạy vì tôi nhận được những gì trông giống như các tin nhắn xung đột.

Trả lời

22

Ban đầu, bạn phải chờ cho đến khi trình quản lý trung tâm nhận được cuộc gọi lại từ centralManagerDidUpdateState: khi bạn khởi động ứng dụng. Sau đó, mỗi lần khác, tôi khuyên bạn nên kiểm tra trạng thái trước khi thực hiện bất kỳ cuộc gọi centralManager nào. Bạn có nhiều khả năng gọi quét hoặc truy xuất trước khi trung tâm có cơ hội cập nhật. Đảm bảo bạn chỉ gọi các phương thức sau khi bạn biết nó đang bật. Bạn sẽ không nhận được lỗi nếu bạn bao bọc từng cuộc gọi trong các câu lệnh kiểm tra trạng thái trước.

- (void)centralManagerDidUpdateState:(CBCentralManager *)central 
{ 
    if(central.state==CBCentralManagerStatePoweredOn) 
    { 
     //Now do your scanning and retrievals 
    } 
} 

Nếu không chỉ cần quấn trung tâm của bạn bên trong một tấm séc nhà nước trước mỗi cuộc gọi:

if(yourCentral.state==CBCentralManagerStatePoweredOn) 
{ 
//you're good to go on calling centralManager methods 
} 
+0

Yep, đó là vấn đề. Cảm ơn. – sudo

+0

Điều này giải quyết được vấn đề cho tôi cảm ơn bạn. Đối với một số lý do này bắt đầu xảy ra với tôi khi tôi nâng cấp lên Xcode 5 GM giả lập. – Dan

+1

Tôi khá chắc chắn Apple không còn hỗ trợ hỗ trợ giả lập BLE trong Xcode 5 –

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