presentViewController: ขัดข้องบน iOS <6 (AutoLayout)


92

นี่เป็นความผิดพลาดแปลก ๆ ที่ฉันได้รับ ความผิดพลาดเกิดขึ้นเมื่อฉันกดปุ่มที่ไปที่ ViewController บางตัว บรรทัดที่มันขัดข้องคือ:

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

การติดตามข้อขัดข้องคือ:

*** 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

หมายเหตุ: สิ่งนี้ขัดข้องบน iPhone 4 iOS 5.1 ของฉัน แต่ไม่ใช่บน iPhone 4S iOS 6 Beta 2 ของฉัน


2
ฉันมีปัญหาเดียวกันหลังจากอัปเกรดเป็น Xcode 4.5 ที่ทำงานและแอปบน iphone 5.1 ดูที่ลิงค์นี้: artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

ใช่ฉันคิดว่าเราได้กำหนดไว้แล้ว :)
MCKapur

คำตอบ:


201

ฉันเชื่อว่านี่เป็นปัญหากับตัวสร้างอินเทอร์เฟซใหม่ของ Xcode คุณบังเอิญสร้าง. xib โดยใช้ตัวสร้างอินเทอร์เฟซของ Xcode 4.5 หรือไม่? ฉันพบปัญหาเดียวกันนี้แล้วและฉันคิดว่านั่นคือปัญหา แอพของฉันทำงานบน iOS 6 แต่ไม่ใช่อะไรที่เก่ากว่า

และคุณต้องให้แน่ใจว่าคุณปิดUse Auto Layoutสำหรับ xibs

ที่สามารถทำได้โดย:

  1. เปิด xib ของคุณ
  2. ไปที่File Inspectorแท็บ
  3. ค้นหาInterface Builder Documentส่วนบนแถบเครื่องมือด้านขวา
  4. ยกเลิกการUse Auto Layoutเลือกตัวเลือก

37
ใช่คุณต้องแน่ใจว่าคุณปิด "ใช้การจัดวางอัตโนมัติ" สำหรับปลายปากกาของคุณ
Wevah

ใช่ปัญหาเดียวกัน จะทำอย่างไรกับมัน? ฉันควรทดสอบบน Xcode 4.4 (นั่นอาจเป็นเหตุผลด้วยเหตุผลแปลก ๆ บางอย่าง iPhone 4 iOS 5.1 ของฉันสามารถทำงานบน Xcode 4.5 ได้ ... แม้ว่าจะไม่ใช่ iOS 6
ก็ตาม

16
ในมุมมองหลักของ xib ของคุณส่วนเอกสารตัวสร้างอินเทอร์เฟซบนแถบเครื่องมือด้านขวา
มาร์ค

สำหรับทุกคนที่สนใจฉันได้สร้างไฟล์ nib ใน Xcode 4.5 สำหรับคอนโทรลเลอร์มุมมองเก่าที่ตั้งค่ามุมมองโดยใช้โปรแกรม ในไม่ช้าฉันก็รู้ว่าหัวปากกาใหม่ของฉันไม่สามารถใช้งานได้ใน iOS 5 ดังนั้นฉันจึงลบไฟล์ nib และเริ่มได้รับข้อผิดพลาดที่คล้ายกันแม้คิดว่าไฟล์ nib ใหม่จะไม่อยู่ในโครงการของฉันอีกต่อไป! วิธีแก้ปัญหาคือเปลี่ยนชื่อไฟล์. h และ. m เอ่อ
Keller

2
ความกังวลเล็กน้อยที่เกิดขึ้นกับการควบคุมคุณภาพของ Apple ในปัจจุบัน
ardochhigh

43

ScreenShot

ฉันมีปัญหาเดียวกันเมื่อฉันดาวน์โหลดการอัปเดต XCode ใหม่และ IOS6 SDK นี่คือวิธีที่ฉันแก้ไข:

เลือกไฟล์ตัวสร้างอินเทอร์เฟซ (ไม่ว่าจะเป็นไฟล์ xib หรือสตอรี่บอร์ด) ที่เกิดข้อผิดพลาดของคุณ ในตัวแก้ไขผู้ช่วยทางด้านขวาใน XCode ให้เลือกแท็บแรกจากด้านซ้ายและมีช่องทำเครื่องหมายสำหรับตัวเลือก "ใช้การจัดวางอัตโนมัติ" เหมือนในภาพหน้าจอด้านบน ยกเลิกการเลือกช่องทำเครื่องหมาย


4

Nagaraja ถามว่า "จะแก้ปัญหาเดียวกันได้อย่างไรถ้าเราไม่ได้ใช้ xib ฉันพบปัญหานี้จริงๆฉันสร้างคอนโทรลเลอร์ด้วย xib จากนั้นฉันตัดสินใจที่จะลบไฟล์ xib ความผิดพลาดไม่ได้หายไปปัญหาคือ ที่ฉันต้องใช้

- (void) loadView

ในคลาสคอนโทรลเลอร์ของฉัน เมื่อฉันใช้วิธีนี้ปัญหาได้รับการแก้ไขแล้ว


1

อีกสาเหตุหนึ่งที่เป็นไปได้สำหรับการขัดข้องกับ presentViewController คือมีบางอย่างในปลายปากกาที่เชื่อมต่อกับตัวแปรที่ไม่มีอยู่แล้ว - ตัวแปรอาจเปลี่ยนชื่อหรือถูกลบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.