Bảng phân cảnh iOS9 hành động không được xử lý (xử lýNonLaunchSpecificActions) là gì?


84

Tôi đã nhận thấy lỗi sau xuất hiện trong bảng điều khiển khi chạy ứng dụng của mình trên iOS 9 khi sử dụng bảng phân cảnh. Tôi đang sử dụng xCode7. Đây có phải là điều tôi cần quan tâm?

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}

Apple cho biết iOS 9 là về sự ổn định, vì vậy tôi đoán bạn không nên lo lắng ;-) PS Tôi có cùng một vấn đề, và một số nhà phát triển khác quá stackoverflow.com/questions/32344082/...
Roma

11
Không chắc liệu nó có liên quan đến Storyboards hay không, tôi cũng thấy nó trong ứng dụng không phải Storyboard của mình.
koen

Có cảnh báo nào khác trong bản dựng không? Có lẽ đó là một cảnh báo có vẻ tầm thường?
Joe Susnick

Tôi không sử dụng bảng phân cảnh và cũng nhận được cảnh báo này. Nó sẽ bật lên khi bạn khóa trình mô phỏng bằng CMD + L và sau đó "trượt để mở khóa" để quay lại ứng dụng.
SDW

Nhìn vào nhật ký thiết bị, nó có thể liên quan đến việc tự động tắt màn hình thiết bị. Dòng SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.được ghi ngay trước thông báo lỗi được trích dẫn.
Christian

Câu trả lời:


32

Không có gì sai với mã của bạn. Đây là một thông báo ghi nhật ký nội bộ của Apple và bạn nên gửi một radar về nó.

Có hai gợi ý cho thấy đây có thể là mã của Apple:

  1. Dấu gạch dưới đứng đầu tên phương thức _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionlà một quy ước chỉ ra rằng phương thức là riêng tư / nội bộ đối với lớp mà nó được khai báo. (Xem nhận xét này .)

  2. Thật hợp lý khi đoán rằng tiền tố hai chữ cái trong FBSSceneSnapshotActionlà viết tắt của FrontBoard, theo Rene Ritchie trong " Danh sách mong muốn của iOS 9: Chế độ khách" là một phần của toàn bộ gia đình phần mềm liên quan đến việc khởi chạy ứng dụng:

Với iOS 8, Apple đã cấu trúc lại trình quản lý hệ thống của mình, SpringBoard, thành một số thành phần nhỏ hơn, tập trung hơn. Ngoài BackBoard, vốn đã được tách ra để xử lý các tác vụ nền, họ đã thêm Frontboard cho các tác vụ nền trước. Họ cũng thêm PreBoard để xử lý Màn hình khóa trong các điều kiện an toàn, được mã hóa. [...]

Tôi không biết BStiền tố trong BSSettingsdùng để làm gì, nhưng

BSlà viết tắt của BackBoard Settings, và một phân tích về thông báo nhật ký này sẽ chỉ ra rằng đó không phải là bất cứ điều gì bạn đã làm và bạn nên gửi một radar với các bước để tái tạo thông báo ghi nhật ký.

Nếu bạn muốn thử và lấy dấu vết ngăn xếp, bạn có thể triển khai danh mục được liên kết đến đây . Một số người cho rằng ghi đè API riêng là một ý tưởng tồi, nhưng trong trường hợp này, việc chèn tạm thời để lấy dấu vết ngăn xếp không thể quá nguy hại.

BIÊN TẬP:

Nhưng, chúng tôi vẫn muốn biết hành động này là gì. Vì vậy, tôi đã đặt một breakpoint -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]và bắt đầu in ra các giá trị đăng ký và tìm thấy một lớp được gọi là FBSceneImplcó rất nhiều thông tin về ứng dụng của tôi:

Bối cảnh

Chúng tôi có thể tìm ra phương thức riêng nào được gọi tiếp theo (được lưu trữ trong bộ đếm chương trình, con trỏ lệnh, thanh ghi 15.)

Bộ đếm chương trình

Tôi đã thử tìm FBSceneSnapshotActiontham chiếu chưa xử lý được tham chiếu trong nhật ký, nhưng không có xúc xắc. Sau đó, tôi phân lớp phụ UIApplication và ghi đè _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Bây giờ tôi đã có thể trực tiếp thực hiện hành động, nhưng chúng tôi vẫn chưa biết nó là gì.

Sau đó, tôi xem lại FBSceneSnapshotAction. Hóa ra nó có một lớp cha được gọi là BSAction.

Sau đó, tôi đã viết một công cụ tương tự như RuntimeBrowser và tra cứu tất cả các lớp con của BSAction. Nó chỉ ra rằng có một danh sách khá nhiều trong số họ:

Danh sách hành động

Hai tên phương thức mà chúng ta có (một từ nhật ký và một từ bộ đếm chương trình trên thiết bị) cho biết rằng các hành động này được sử dụng để chuyển các hành động xung quanh hệ thống.

Một số hành động có thể được gửi tới lệnh gọi lại của đại biểu ứng dụng, trong khi những hành động khác được xử lý nội bộ.

Điều đang xảy ra ở đây là có một hành động không được xử lý chính xác và hệ thống đang ghi nhận nó. Rõ ràng là chúng tôi không nên nhìn thấy nó.


Điều tra tốt nhưng đây là một điều thú vị, tôi nhận được lỗi OP chính xác khi sử dụng API riêng của Apple. Tôi đoán vì tôi đang sử dụng API riêng nên tôi nhận được nhật ký bảng điều khiển có thể dành cho các kỹ sư của Apple.
OhadM

1
@Moshe Apple đã trả bao nhiêu cho bạn để điều tra thay mặt họ? Nhưng họ có thể không quan tâm đến nó. : p
codelearner

"Thông báo về nó" nghĩa là gì?
Paul Masri-Stone

Nó có nghĩa là gửi một báo cáo lỗi bằng công cụ báo cáo lỗi của Apple.
Moshe

12

AFAIK, thông tin ở trên có liên quan đến iOS trong quá trình chụp nhanh màn hình (tôi cho rằng hành vi liên quan đến đa nhiệm vụ khi nhấp đúp vào nhà). Tôi đã điều tra sâu về ứng dụng của mình và có vẻ như nó không nhận được bất kỳ hành vi phụ nào. Bạn có thể bỏ qua nó một cách an toàn, bây giờ.

Bạn có thể sử dụng danh mục ý chính đơn giản sau để tự kiểm tra các lệnh gọi hàm trên:


1

Tôi đã tìm ra, nó sẽ xảy ra khi bạn khai báo phương thức IBAction trong tệp .h hoặc .m nhưng bạn chưa ràng buộc nó với bất kỳ điều khiển nào.

.m ví dụ:

- (IBAction)click:(id)sender{
}

nhưng không được gán phương pháp này cho bất kỳ điều khiển nào trong bảng phân cảnh.


Đây không phải là trường hợp trong ứng dụng của tôi - tôi không có bất kỳ IBActions chưa ràng buộc nào và tôi cũng nhận được thông báo này. Ứng dụng của tôi là một ứng dụng Swift.
henrikstroem

1

chưa tìm hiểu lý do tại sao nó xảy ra trong ứng dụng của tôi, nhưng ít nhất bạn có thể nắm bắt được ngoại lệ, nếu bạn muốn giữ điều này không xuất hiện trong ngăn nhật ký của mình. Nó không phải là một giải pháp, nhưng nó có thể cung cấp cho bạn cái nhìn sâu sắc hơn về lý do tại sao nó lại hạnh phúc bằng cách kiểm tra bất kỳ đối số nào được thông qua trong quá trình bắt.

phiên bản nhanh chóng 2:

import UIKit

extension UIApplication {
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
        //whatever you want to do in this catch
        print("handleNonLaunchSpecificActions catched")
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.