2016-03-30 23 views
21

Chức năng này thất bại với lỗi runtime:gỡ lỗi xem hệ thống phân cấp trong Xcode 7.3 không

-[UIWindow viewForFirstBaselineLayout]: unrecognized selector sent to instance 0x7fb9dae257d0 

Bất kỳ ai gặp phải giống nhau không?

UPD:
Không có trên trình giả lập iOS 8.1/8.4. 9.3 hoạt động tốt.

UPD2: UIWindow được tạo ra như:

window = UIWindow(frame: UIScreen.mainScreen().bounds)  
window?.rootViewController = RootViewController.rootVC 
window?.makeKeyAndVisible() 
+0

bạn sẽ làm gì với 'UIWindow'? – holex

+0

Không có giao dịch nào cả. Thanh tra giao diện người dùng không thành công. – orkenstein

+0

Hiện tôi đang gặp phải vấn đề tương tự, tìm kiếm các giải pháp – Jagie

Trả lời

21

tôi đã trình gỡ lỗi xem hoạt động trở lại bằng cách đặt sửa chữa sau đây trong dự án của tôi:

#ifdef DEBUG 

#import <UIKit/UIKit.h> 
#import <objc/runtime.h> 

@implementation UIView (FixViewDebugging) 

+ (void)load 
{ 
    Method original = class_getInstanceMethod(self, @selector(viewForBaselineLayout)); 
    class_addMethod(self, @selector(viewForFirstBaselineLayout), method_getImplementation(original), method_getTypeEncoding(original)); 
    class_addMethod(self, @selector(viewForLastBaselineLayout), method_getImplementation(original), method_getTypeEncoding(original)); 
} 

@end 

#endif 

Khi tải dự án của bạn, các load phương pháp sẽ thực hiện, gây viewForFirstBaselineLayoutviewForLastBaselineLayout sử dụng thực hiện viewForBaselineLayout nếu họ hiện không được triển khai, do đó, xem gỡ lỗi được iOS8 hương vị hành vi mà nó đang tìm kiếm.

Để thêm mục này vào dự án của riêng bạn, hãy tạo tệp Mục tiêu-C trống mới trong dự án của bạn và dán nội dung vào. Bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn. Tôi gọi tôi là "UIView + FixViewDebugging". Nếu bạn đang trong một dự án Swift thuần túy, bạn không cần tạo tiêu đề cầu nối. Các tập tin sẽ được biên dịch vào dự án của bạn và bạn không cần phải tham khảo nó.

Lưu ý rằng thao tác này chỉ hoạt động đối với các bản dựng lỗi do #ifdef DEBUG. Bạn có thể loại bỏ nó nhưng sau đó bạn có thể vô tình biên dịch này vào bản phát hành bản phát hành của bạn (mặc dù nó không có tác dụng phụ bị bệnh). Nếu phương pháp này không hoạt động với những dòng này, hãy kiểm tra xem mục tiêu của bạn có DEBUG=1 trong Cài đặt xây dựng> Apple LLVM - Tiền xử lý trước> Macro tiền xử lý> Gỡ lỗi.

+2

Vẫn bị hỏng như của Xcode 7.3.1 (7D1014), có hoặc không có sự lộn xộn ở trên, ngay cả trong 9.3 (13E230) Simulator. – verec

+0

Làm việc cho tôi trên XCode 7.3.1 – Division

+0

Đã không hoạt động với tôi trong XCode 7.3.1, iPhone 6s iOS 9.3.2. –

21

Hình như Xcode 7.3 sử dụng viewForFirstBaselineLayout tài sản để vẽ UI. Nhưng thuộc tính này được đánh dấu là có sẵn kể từ iOS 9.0.

Screenshot of UIView.h

[UIView viewForFirstBaselineLayout] phương pháp nên được sử dụng cho các phiên bản trước lên iOS 9.0. Có vẻ như những kẻ từ Apple đã không xem xét trường hợp này.

+0

Đúng vậy, một khi tôi chuyển sang trình mô phỏng iOS 8, lỗi xảy ra và chuyển về iOS 9, không còn lỗi nữa. – bubuxu

0

Có. khi nhấp vào nút phân cấp xem lỗi, trang không có gì và in "[UIWindow viewForFirstBaselineLayout]: bộ chọn không được nhận dạng được gửi tới ví dụ 0x7fb9dae257d0".

Để giải quyết vấn đề này, chỉ cần chắc chắn bạn đang sử dụng hệ điều hành iOS không dưới iOS 9.0 và bạn vẫn sẽ sử dụng chức năng đó một cách tự do.

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