2013-08-29 28 views
5

Tôi đang triển khai thiết bị trung tâm BLE trên iPhone, sử dụng thiết bị BLE tùy chỉnh ngoại vi được phát triển (phần mềm đã được viết bởi đồng nghiệp).Có thể truy cập theo lập trình các mã lỗi được ghi bởi CoreBluetooth không?

Thiết bị ngoại vi cho một số thao tác sẽ trả về mã lỗi BLE, tuân thủ các mã lỗi ATT chuẩn của Bluetooth như được định nghĩa trong thông số kỹ thuật BLE.

Về phía iPhone, nơi tôi đang sử dụng CoreBluetooth ngăn xếp để phát triển các thiết bị trung tâm, tôi đang thông báo về lỗi này trên cửa sổ đầu ra debugger của Xcode như:

CoreBluetooth [CẢNH BÁO] Lỗi không xác định: XX

và sau đó tôi nhận được trong callbacks một đối tượng CBError *. Vấn đề của tôi là đối tượng CBError * mà tôi nhận được trong hàm gọi lại (ví dụ: trong hàm callWarvate doWriteValueForCharacteristic của CBPeripheralDelegate) chỉ chứa mã = ​​0 và localizedDescription = "Lỗi không xác định".

Có thể truy xuất bằng cách nào đó mã lỗi được đăng nhập trên cửa sổ đầu ra trình gỡ lỗi bởi ngăn xếp CoreBluetooth không?

Từ nghiên cứu của tôi, có vẻ như CoreBluetooth ánh xạ gần như tất cả các mã lỗi chuẩn BLE vào "lỗi không xác định" (có mã nội bộ 0, xem CBError reference); Tôi muốn nhận được mã lỗi chi tiết hơn, như mã được mã hóa bởi CBAttError.

+0

Bạn có gặp thêm bất kỳ vấn đề nào không? – allprog

Trả lời

4

Trong một ứng dụng, bạn chỉ có thể sử dụng API CoreBluetooth. Những người phơi bày chỉ CBError đó, như bạn thấy nó ngay trong nhiều trường hợp có thể che dấu các lỗi thực sự. Vì vậy, câu trả lời cho chính thức truy cập vào các lỗi nguồn là bạn không thể làm điều đó.

Tuy nhiên, nếu muốn, bạn có thể truy cập Nhật ký hệ thống Apple theo chương trình. (Xem bài đăng: Using Objective C to read log messages posted to the device console) Bạn có thể xác định truy vấn để trả về các mục bạn quan tâm và cố gắng khấu trừ lý do thực sự của lỗi. Đây là một phương pháp heuristic nhưng tại thời điểm này, thật không may, chúng tôi không có cách nào khác để làm điều đó.