presentViewController: crash trên iOS <6 (AutoLayout)


92

Đây là một vụ tai nạn kỳ lạ mà tôi đang gặp phải. Sự cố xảy ra khi tôi nhấn một nút đi đến một ViewController nhất định. Dòng mà nó gặp sự cố là:

DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init];
[info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve];
[self presentViewController:info animated:YES completion: nil]; // CRASHES HERE
[info release];

Dấu vết vụ tai nạn là:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *** First throw call stack: (0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200) terminate called throwing an exception(gdb) Could not instantiate class named NSLayoutConstraint

LƯU Ý: Sự cố này xảy ra trên iPhone 4 iOS 5.1 của tôi nhưng không xảy ra trên iPhone 4S iOS 6 Beta 2 của tôi


2
Tôi đã cùng một vấn đề sau khi nâng cấp lên Xcode 4.5 chạy và ứng dụng trên iphone 5.1 Nhìn vào liên kết này: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

Vâng, tôi nghĩ chúng tôi đã thiết lập điều đó :)
MCKapur 22/09/12

Câu trả lời:


201

Tôi tin rằng đây là sự cố với trình tạo giao diện mới của Xcode. Bạn có tình cờ xây dựng .xib của mình bằng trình tạo giao diện của Xcode 4.5 không? Tôi vừa gặp phải vấn đề tương tự và tôi nghĩ đó là vấn đề. Ứng dụng của tôi chạy trên iOS 6, nhưng không chạy trên iOS 6.

Và bạn cần đảm bảo rằng bạn đã tắt Use Auto Layoutxibs của mình .

Điều đó có thể được thực hiện bằng cách:

  1. Mở xib của bạn.
  2. Chuyển đến File Inspectortab.
  3. Tìm Interface Builder Documentphần trên thanh công cụ bên phải.
  4. Bỏ chọn Use Auto Layouttùy chọn.

37
Vâng, bạn cần đảm bảo rằng bạn đã tắt "sử dụng bố cục tự động" cho ngòi của mình.
Wevah

Vâng, cùng một vấn đề. Phải làm gì về nó? Tôi có nên thử nghiệm nó trên Xcode 4.4 (Đó có thể là lý do, vì một lý do lạ iPhone của tôi 4 iOS 5.1 có thể chạy trên Xcode 4.5 ... mặc dù nó không phải là iOS 6)
MCKapur

16
Trong giao diện chính của xib của bạn, phần Tài liệu của trình tạo giao diện trên thanh công cụ bên phải.
Đánh dấu

Đối với bất kỳ ai quan tâm, tôi đã tạo một tệp nib trong Xcode 4.5 cho một bộ điều khiển chế độ xem cũ thiết lập chế độ xem của nó theo chương trình. Tôi sớm nhận ra nib mới của mình sẽ không hoạt động trong iOS 5, vì vậy tôi đã xóa tệp nib và bắt đầu gặp lỗi tương tự, thậm chí còn nghĩ rằng tệp nib mới không còn trong dự án của tôi nữa! Giải pháp là đổi tên các tệp .h và .m, ugh.
Keller

2
Một chút lo lắng về những gì đang xảy ra với việc kiểm soát chất lượng tại Apple những ngày này.
ardochhigh

43

ScreenShot

Tôi đã gặp sự cố tương tự khi tải xuống bản cập nhật XCode mới và SDK IOS6. Đây là cách tôi đã giải quyết nó:

Chọn tệp trình tạo giao diện (cho dù là xib hay tệp bảng phân cảnh) nơi lỗi của bạn xảy ra. Trong trình chỉnh sửa trợ lý ở bên phải trong XCode, hãy chọn tab đầu tiên từ bên trái và có một hộp kiểm cho tùy chọn "Sử dụng Tự động thanh toán" như trên ảnh chụp màn hình ở trên. Bỏ chọn hộp kiểm.


4

Nagaraja hỏi "Làm thế nào để giải quyết tương tự nếu chúng tôi không sử dụng xib? Tôi đã gặp chính xác vấn đề này. Tôi đã tạo bộ điều khiển với xib và sau đó tôi quyết định xóa tệp xib. Sự cố vẫn không biến mất. Vấn đề là mà tôi cần phải thực hiện

- (void) loadView

trong lớp điều khiển của tôi. Khi tôi thực hiện phương pháp này, vấn đề đã được giải quyết.


1

Một lý do khác có thể gây ra sự cố với presentViewController là có một cái gì đó trong nib được kết nối với một biến không còn ở đó - biến bị thay đổi tên hoặc bị xóa.

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.