Tắt thông báo lỗi ràng buộc tự động thanh toán trong đầu ra bảng điều khiển gỡ lỗi trong Xcode


78

Có cách nào để (tạm thời) tắt thông báo lỗi / cảnh báo tự động thanh toán không:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>",
    "<NSLayoutConstraint:0x170098600 UIView:0x15c6294f0.leading == UIView:0x15c628d40.leadingMargin - 8>",
    "<NSLayoutConstraint:0x170098650 H:[UIView:0x15c6294f0]-(0)-[UIView:0x15c62b750]>",
    "<NSLayoutConstraint:0x1700986a0 UIView:0x15c62b750.width == UIView:0x15c6294f0.width>",
    "<NSLayoutConstraint:0x1700986f0 UIView:0x15c628d40.trailingMargin == UIView:0x15c62b750.trailing - 8>",
    "<NSLayoutConstraint:0x170098880 H:[UIView:0x15c6294f0]-(0)-[UIView:0x15c62c100]>",
    "<NSLayoutConstraint:0x1700988d0 UIView:0x15c628d40.centerX == UIView:0x15c62c100.centerX + 1>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

6
Khắc phục ràng buộc bổ sung là cách duy nhất để loại bỏ thông báo này.
itji10dra

4
không phải là ONLYnhưng cách tốt nhất để thoát khỏi những tin nhắn
mbH

3
Khi lỗi al do iOS gây ra và bạn không thể sửa lỗi đó và các lỗi sẽ lộn xộn trong nhật ký.
Jonny

Câu trả lời:


213

Đã thực hiện một số dịch ngược và thực sự có một cách:

cho Swift 5

UserDefaults.standard.set(false, forKey: "_UIConstraintBasedLayoutLogUnsatisfiable")

Objective-C

[[NSUserDefaults standardUserDefaults] setValue:@(NO) forKey:@"_UIConstraintBasedLayoutLogUnsatisfiable"];

Bây giờ, bạn sẽ chỉ nhận được thông báo rằng "_UIConstraintBasedLayoutLogUnsatisfiable đang TẮT".

Lời nhắc bắt buộc cho bất kỳ ai đang đọc nội dung này: đây sẽ là phương sách cuối cùng, để biết các mẹo gỡ lỗi và khắc phục các vấn đề về ràng buộc, hãy xem các phiên "Bí ẩn về bố cục tự động" của WWDC: phần 1phần 2 .


23
Chính xác - nhu cầu đối với tôi là vô hiệu hóa các lỗi tạm thời để tôi có thể sửa một cái gì đó khác, và sau đó quay lại cơn ác mộng bố cục tự động sau. Cám ơn vì cái này!
Markus Rautopuro

Câu trả lời tuyệt vời Witold! Đối với những ai sử dụng Swift 3: UserDefaults.standard.setValue (false, forKey: "_UIConstraintBasedLayoutLogUnsatisfiable")
alex1511

1
như thế nào và ở đâu để sử dụng instruvtion
Android teem

@MarkusRautopuro chúng ta nên chạy cái này ở đâu?
vbuzze

Trong AppDelegate. Bạn có thể làm điều đó trong applicationDidFinishLaunchingchẳng hạn.
Markus Rautopuro

23

Giải pháp Swift 4.0 & Swift 5.0:

//Hide Autolayout Warning
UserDefaults.standard.set(false, forKey: "_UIConstraintBasedLayoutLogUnsatisfiable")

Giải pháp Swift 3.0:

//Hide Autolayout Warning
UserDefaults.standard.setValue(false, forKey:"_UIConstraintBasedLayoutLogUnsatisfiable")

3
Tại sao phải thêm câu trả lời mới bằng giải pháp trùng lặp, khi nào có thể chỉnh sửa câu trả lời ban đầu.
Nik Kov

@NikKov tại thời điểm đó .. Tôi không có quyền truy cập để chỉnh sửa câu trả lời đó. Như tôi nhớ.
Sourabh Sharma

12

Một tùy chọn nữa là tạm thời đưa -_UIConstraintBasedLayoutLogUnsatisfiable NO(chú ý dấu gạch ngang) vào Arguments Passed On Launchmenu, dưới Product -> Scheme -> Edit Scheme... -> Run -> Argumentstab (bạn cũng có thể mở menu này bằng cách nhấn + + <), như sau:

nhập mô tả hình ảnh ở đây


Tuyệt quá. Tôi nghĩ rằng đây là giải pháp tốt nhất để loại bỏ các bản ghi không mong muốn
rmvz3

1
Thật sự tôi không thể tìm ra những gì là "mục tiêu" ở đây, vì vậy tìm kiếm "Chỉnh sửa chương trình" trong thả dow menu của nút App Đề án, được đặt ở phía bên phải của Chơi / Ngừng nút trên đầu trang của XCode
djdance

6

dành cho bất kỳ ai đang tự hỏi làm thế nào để thực hiện macOS / osx này với AppKit / Cocoa

UserDefaults.standard.set(false, forKey: "NSConstraintBasedLayoutLogUnsatisfiable")
UserDefaults.standard.set(false, forKey: "__NSConstraintBasedLayoutLogUnsatisfiable")

chúng ta nên chạy cái này ở đâu?
vbuzze

1
tôi đã làm ở điểm nhập ứng dụng. Nếu đó là một ứng dụng thì bạn có thể làm điều đó trong applicationDidFinishLaunching trong AppDelegate của bạn
Charlton Provatas

3

Tôi đã cố gắng giải quyết vấn đề này bằng lldb và tôi đã tìm thấy giải pháp:

  1. Tạo Điểm ngắt biểu tượng cho Biểu tượng UIViewAlertForUnsatisfiableConstraints trong UIKit Mô-đun.
  2. Khi hành động điểm ngắt, hãy thêm lệnh trình gỡ lỗi "chuỗi trở lại"
  3. Thêm lệnh gỡ lỗi thứ hai: "c"
  4. Tắt "Tự động tiếp tục sau khi đánh giá hành động"

Nếu Ứng dụng của bạn gặp sự cố về bố cục, việc thực thi sẽ bị tạm dừng. Với lệnh "thread return", hàm UIViewAlertForUnsatisfiableConstraints in ra lỗi buộc phải trả về trước khi thông báo cảnh báo được in vào bảng điều khiển.

Với lệnh "c", việc thực thi ứng dụng của bạn được tiếp tục (Lưu ý: "Tự động tiếp tục sau khi đánh giá hành động" bằng cách nào đó không hoạt động trong trường hợp này)

Tuy nhiên, với các hành động tự động này, điểm ngắt có thể hoạt động lạ nếu nó bị nhấn hai lần trong một hàng sẽ khiến ứng dụng của bạn gặp sự cố. Để giải quyết điều này, bạn có thể loại bỏ các hành động điểm ngắt và nhập các lệnh theo cách thủ công khi trình gỡ lỗi tạm dừng việc thực thi chương trình.

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.