บอร์ดโครงเรื่องไม่มีตัวควบคุมมุมมองพร้อมตัวระบุ


175

ฉันได้รับข้อผิดพลาดต่อไปนี้:

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

นี่คือรหัส:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

เราได้ตั้งไว้แล้วidentifierในUIStoryboardแต่ฉันยังคงได้รับข้อผิดพลาดนี้

ป้อนคำอธิบายรูปภาพที่นี่



4
ดูเหมือนว่าคุณตั้งค่าตัวบ่งชี้ของ segue ไม่ใช่ตัวควบคุมมุมมอง คุณกำลังพยายามแสดงตัวควบคุมมุมมองใดในภาพนั้น และทำไมคุณไม่ใช้เพียงแค่ส่วนต่อขยาย?
Firoze Lafeer

ตัวควบคุมมุมมองการขับขี่ถึงทำงานได้ดีกว่า .... เมื่อฉันพยายามนำเสนอ TableViewController ฉันได้รับข้อผิดพลาด ...... คุณจะทำอย่างไร
Mat

ไปที่ Storyboard ลบ ID สตอรีบอร์ดนั้นและเพิ่มอีกครั้ง บางครั้งคุณต้องทำความสะอาดโฟลเดอร์การสร้างและข้อมูลที่ได้รับ
onmyway133

คำตอบ:


244

สำหรับการอ้างอิงในอนาคต:

ฉันกำลังพัฒนาบน iOS 6 โดยใช้สตอรี่บอร์ด

ฉันพบปัญหาเดียวกัน แต่ไม่พบฟิลด์ "ตัวระบุ" ในตัวตรวจสอบ ให้ตั้งค่าฟิลด์ที่ชื่อว่า "Storyboard ID" ให้เป็นชื่อที่คุณระบุ ฟิลด์นี้อยู่ใต้แท็บ "แสดงตัวตรวจสอบตัวตน" ในตัวตรวจสอบ

[หมายเหตุ - ความคิดเห็นด้านล่างระบุว่าบางคนพบว่าพวกเขาต้องการ (หรือยัง) ตั้งค่าฟิลด์ "Restoration ID" ใต้ ID สตอรีบอร์ดในผู้ตรวจสอบ การคลิกที่ "ใช้สตอรีบอร์ด ID" ดูเหมือนจะไม่เพียงพอ]

มีภาพด้านล่างสำหรับการอ้างอิง: (ในกรณีนี้ฉันได้ตั้งชื่อตัวระบุเหมือนกับคลาสของฉัน) ป้อนคำอธิบายรูปภาพที่นี่


24
ก่อน XCode 4.4 และรุ่นก่อนหน้า: ตัวระบุ; XCode 4.5: ID สตอรีบอร์ด
ilmiacs

ขอบคุณสำหรับข้อมูล. ฉันมีปัญหาในการค้นหาตัวระบุในกระดานเรื่องราวตามคำอธิบายใน Google แต่ฉันไม่พบตัวระบุใน Xcode4.6 นี่เป็นปัญหาใหญ่สำหรับมือใหม่ ขอบคุณ
ผู้เริ่มต้น

4
สิ่งที่ใช้ได้ผลสำหรับฉันคือการใช้ ReuseIndentifier ID สตอรีบอร์ดยังคงทำให้เกิดข้อยกเว้นพอยน์เตอร์พอยน์เตอร์
Droid Chris

กรณีเดียวกันที่นี่ @DroidChris
Ahmed

5
ตรวจสอบ"ใช้สตอรีบอร์ด ID"ทำให้ฉันมีความสุข
preetam

189

ในXcode 7-11 ,

เมื่อคุณเปลี่ยน ID กระดานเรื่องราวและคุณได้รับข้อผิดพลาดเช่นนี้

เพียงแค่ทำความสะอาดโครงการของคุณ ( CMD+ SHIFT+ K)


13
ทำไมฉันถึงลืมที่จะทำเช่นนี้เสมอ? มันแก้ไขปัญหาที่บ้าคลั่งที่สุด ขอบคุณ Ted สำหรับเตือนฉัน!
AlphaCodaSeven

2
ปัญหานี้เกิดขึ้นใน XCode 7.2 เมื่อดึงจาก repo ที่ VC ในกระดานเรื่องราวได้รับการกำหนดตัวระบุ การทำความสะอาดโครงการดูเหมือนจะแก้ไขปัญหาได้
Ed George

2
ฉันคิดว่าฉันกำลังสูญเสียความคิดของฉัน ... เรื่องง่าย ๆ ไม่ทำงานนี่เป็นกลอุบาย
dokun1

2
ใช่มันทำงาน !!!! บางครั้งการทำความสะอาดโครงการ xcode จะลบการอ้างอิงที่ไม่พึงประสงค์ไปยังโครงการ
kiran

3
ฉันมาจากการพัฒนา Android Studio และ Android นี่มันบ้าไปกี่แฮ็คที่ฉันต้องใช้ใน XCode และ Swift ฉันต้องร้องไห้จริงๆ อย่างจริงจัง.
ktamas

43

แก้ไขแล้ว! ไม่เพียง แต่จะต้องตั้งค่าตัวระบุในเซกเมนต์ในกรณีของฉัน DrivingDetails แต่ยังต้องตั้งค่าตัวระบุใน tableViewController ของฉันเป็น DrivingDetails ... ตรวจสอบรูปภาพของฉัน:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันลบตัวควบคุมมุมมองการนำทางด้วยดังนั้นตอนนี้ตัวควบคุมมุมมองตาราง 2 ตัวจะเชื่อมต่อโดยตรงกับภาพเคลื่อนไหว "พุช"

***** แก้ไขสำหรับ XCODE 7.0 *****

คุณต้องตั้งค่า StoryboardId (ในกรณีนี้ viewController ฝังอยู่ในตัวควบคุมทิศทาง:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

ป้อนคำอธิบายรูปภาพที่นี่


2
ฉันพบปัญหาที่คล้ายกันกับคำถามนี้ แต่เมื่อฉันไปที่ตัวตรวจสอบคุณลักษณะฉันไม่เห็น 2 ฟิลด์เหมือนในหน้าจอของคุณที่ยิงเฉพาะฟิลด์ชื่อเท่านั้นไม่มีฟิลด์ตัวระบุ
Anon957

คุณดูคำตอบข้างต้นแล้วหรือยัง ฉันคิดว่ามีการปรับปรุงเพิ่มเติม ขอบคุณ
Mat

1
ตัวระบุสำหรับการทำต่อไม่มีส่วนเกี่ยวข้องกับสิ่งนี้ ID สตอรี่บอร์ดสำหรับตัวควบคุมมุมมองเท่านั้นที่จะต้องตั้งค่าในกระดานเรื่องราว
Jawwad

อาจเกี่ยวข้องกัน ใน iOS7 [storyboard instantiateViewControllerWithIdentifier]ไม่ใช่การสร้างมุมมองจากตัวสร้างส่วนติดต่อภายในตัวควบคุมมุมมอง แต่ใน iOS6 มันทำ
William Entriken

30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

บันทึก:

  • "StoryboardFileName"เป็นชื่อไฟล์ของ Storyboard ไม่ใช่ ID ของ Storyboard!
  • "StoryboardID"คือ ID ที่คุณตั้งค่าด้วยตนเองในตัวตรวจสอบตัวตนสำหรับสตอรี่บอร์ดนั้น (ดูภาพหน้าจอด้านล่าง)

ID สตอรีบอร์ด

บางครั้งผู้คนเชื่อว่าอันแรกคือ ID สตอรีบอร์ดและอีกอันหนึ่งเป็นชื่อคลาส View Controller ดังนั้นให้สังเกตความแตกต่าง


1
นี้!! คนของฉันคุณเพิ่งแก้ไขความลึกลับ 18 ชั่วโมงของฉัน ขอบคุณสำหรับคำอธิบายที่กระชับ
mrfevrier

1
พระเยซู! ขอบคุณสำหรับสิ่งนี้! .instantiateViewController(withIdentifier: "StoryboardID")ควรเปลี่ยนชื่อเป็น.instantiateStoryboard(withIdentifier: "StoryboardID")หรือเพียงบางสิ่งที่ง่ายกว่าUIStoryboard(name: "StoryboardFileName", bundle: nil).init()
roosevelt

16

Identity อยู่ในแท็บ Identity Inspector ชื่อ Storyboard ID สำหรับ Xcode 6.3.2 และตรวจสอบตัวเลือก Use Storyboard ID ป้อนคำอธิบายรูปภาพที่นี่


นี่เป็นปัญหาตลอดมาสิ่งนี้ใช้ได้ทั้งสองที่ที่ฉันมีปัญหา ไม่ใช่แค่การตั้งค่า ID สตอรีบอร์ดคุณต้องตรวจสอบ 'ใช้สตอรีบอร์ด ID'
Tyler Hack

"ใช้สตอรีบอร์ด ID" เป็นส่วนสำคัญที่ขาดหายไปสำหรับฉัน ขอบคุณ.
Marcy

9

เพิ่งมีปัญหานี้หลังจากเพิ่ม VC ใหม่ลงในกระดานเรื่องราว แต่เฉพาะบนอุปกรณ์ไม่ใช่ในโปรแกรมจำลอง ปรากฎว่าเกิดจากการมีการแปลสตอรีบอร์ดหลายภาษา - VC ถูกเพิ่มไปยังกระดานหลักเท่านั้น ฉันลองลบการโลคัลไลซ์เซชันอื่น ๆ (อันที่หนึ่งคือ iPhone ของฉันใช้) แต่ก็ยังมีข้อผิดพลาด ในท้ายที่สุดฉันต้องสร้างการแปลภาษาท้องถิ่นอื่นด้วย VC ใหม่ในแต่ละรายการ


5

คอมไพเลอร์แสดงข้อผิดพลาดดังต่อไปนี้:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

นี่คือเป้าหมายของกระดานเรื่องราวที่สร้างขึ้นไม่ใช่กระดานเรื่องราวหลักที่มี ViewControllers ของเรา ในฐานะที่เป็นไฟล์สตอรี่บอร์ดที่ทำงานเรามีชื่อเป็น Main.storyboard ดังนั้นเราต้องมีการอ้างอิงวัตถุของMain.storyboard Main.storyboard

ใช้รหัสต่อไปนี้เพื่อที่:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

นี่storyboardWithNameคือชื่อของไฟล์สตอรีบอร์ดที่เรากำลังทำงานและbundleระบุบันเดิลที่สตอรี่บอร์ดของเราเป็น (เช่นmainBundle)


5

สำหรับผู้ที่มีปัญหาเดียวกันกับ @Ravi Bhanushali ต่อไปนี้เป็นคำตอบของ Swift 4:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)


ควรเพิ่มความคิดเห็นในคำตอบของ @Ravi
นิล

ฉันจะมี แต่ไม่มีชื่อเสียง ใครบางคนที่มีชื่อเสียงมากพอยินดีต้อนรับมากกว่า
confitz20

4

ฉันพบมัน ... คลิกที่ตัวควบคุมมุมมองในกระดานเรื่องราวคลิกไอคอนที่สามจากซ้ายบนตัวตรวจสอบคุณลักษณะ vc - หนึ่งที่คุณตั้งชื่อการโทรบน scereen ที่มันบอกว่า 'ตัวตน' - ของฉันถูกซ่อนอยู่ฉันต้อง คลิกที่ตัวตนของคำจากนั้นจะแสดงสตอรี่บอร์ด ID - เพิ่มตัวระบุจากรหัสเสร็จแล้ว


4

การปรับเปลี่ยน "Storyboard ID" ในตัวตรวจสอบตัวตน (ไอคอนที่ 3 ทางซ้าย) ควรใช้งานได้

หากไม่ใช่และคุณแน่ใจว่าไม่มีการพิมพ์ผิดลองทำความสะอาดโครงการ ("ผลิตภัณฑ์" -> "ล้าง" หรือเพียงแค่ใช้คำสั่ง + shift + K)


ช่วยชีวิตฉันไว้. ขอบคุณ (โดยเฉพาะส่วนที่เกี่ยวกับการทำความสะอาด)
Jay

1

ในขณะที่ป้อนตัวระบุคุณยังไม่ได้เลือกตัวควบคุมมุมมองที่เหมาะสมเพียงตรวจสอบอีกครั้งหากทำขั้นตอนนี้ซ้ำอีกครั้ง


ฉันควรเลือกตัวควบคุมมุมมองตัวใด ขอโทษฉันสับสน
Mat

TableViewController * controller = [self.storyboard instantiateViewControllerWithIdentifier: @ "drivingDetails"]; controller.title = [[dao libraryItemAtIndex: indexPath.row] valueForKey: @ "name"]; [self.navigationController pushViewController: คอนโทรลเลอร์ภาพเคลื่อนไหว: ใช่]; แบบนี้?
Mat

ตามภาพ TableViewController ควรเลือกเป็น u กำลังทำเพื่อแสดงรายละเอียดในตัวควบคุมนั้น
iamsult

คำอธิบายทีละขั้นตอนของกระดานเรื่องราวที่กำหนดให้raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1
iamsult

1
เพียงเล็กน้อยให้ทราบตัวบ่งชี้ segue ของคุณและตัวควบคุมมุมมองจะแตกต่างกัน ฉันแค่อยากจะเน้นว่าในกรณีที่มีความสับสนบางอย่างเนื่องจากคุณใช้ชื่อเดียวกันสำหรับทั้งคู่ ตัวระบุส่วนแบ่งของคุณควรใช้ใน PreparForSegue และตัวระบุตัวควบคุมมุมมองของคุณใช้สำหรับการโหลดมุมมองจากกระดานเรื่องราวของคุณโดยตรง scott-sherwood.com/?p=219
สกอตต์เชอร์วูด

1

ตัวควบคุมมุมมองของฉันสองสามคนขาดคุณลักษณะstoryboardIdentifier

ก่อน:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

หลังจาก:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

0

ฉันมีข้อผิดพลาดเดียวกันและฉันสามารถแก้ไขได้โดยเปลี่ยนการเปลี่ยนแปลงต่อไปนี้ในโครงการของฉัน ฉันได้กล่าวชื่อชั้นเรียนของฉันในแผงตรวจสอบแล้วปัญหาได้รับการแก้ไข ไปที่ -> แผงด้านขวามีตัวตรวจสอบตัวตนในส่วนคลาสที่กำหนดเอง

คลาส: ชื่อคลาสของคุณ (ViewController)

ใน ID เรื่องราวส่วน ID: สตอรี่บอร์ด ID ของคุณ (ชื่อ viewController)

หลังจากนี้คลิกที่ตัวเลือกใช้สตอรี่บอร์ด ID ตรงนั้นนั่นเป็นปัญหาเสร็จสิ้น ฉันหวังว่ามันจะช่วยคุณ ....



0

มันง่ายมากเลือกตัวควบคุมมุมมองที่เกี่ยวข้องในกระดานเรื่องราวหลักและตรวจสอบสตอรีบอร์ด ID หากมีอยู่ในปัจจุบันใช้มันใน identidier ของการตั้งชื่อและใช้งาน

ที่นี่ Firstone ของฉันคือ StoryboardID ให้ vc = self.storyboard? .InstantiateViewController (withIdentifier: "firstone") เป็น! tabBarViewController


0

ฉันลองวิธีการแก้ปัญหาทั้งหมดข้างต้นแล้วและไม่มีใครทำงาน

สิ่งที่ฉันทำคือ:

  • โครงการสะอาด
  • ลบข้อมูลที่ได้รับ
  • รีสตาร์ท Xcode
  • ป้อน StoryboardID ที่แสดงในคำตอบก่อนหน้า (ใน IB) อีกครั้ง

แล้วมันก็ใช้งานได้ สิ่งที่น่าตกใจคือฉันได้ป้อน Storyboar ID ในเครื่องมือสร้างส่วนต่อประสานและมันถูกลบ / ลบหลังจากเปิด Xcode อีกครั้ง

หวังว่านี่จะช่วยใครซักคน


0

การทำความสะอาดทุกสิ่งและการปิด Xcode ไม่สามารถแก้ไขปัญหาให้ฉันได้

ฉันต้องลบ viewController และสร้างใหม่ด้วยตัวระบุใหม่


0

หมายเหตุ:หากคุณใช้ cocoapods ในโครงการของคุณก่อนอื่นให้เรียกใช้pod deintegrateและrm Podfile.lock

จากนั้นเปิดโฟลเดอร์โครงการของคุณในโปรแกรมแก้ไขรหัสบุคคลที่สามใด ๆ เช่นVSCodeและทำการค้นหาทั่วโลกสำหรับชื่อ ViewController ที่แสดงข้อผิดพลาด

  1. เปลี่ยนชื่อ / แก้ไขชื่อผิดที่คุณพบ
  2. บันทึกการเปลี่ยนแปลงทั้งหมด
  3. ทำความสะอาดและสร้างโครงการของคุณ

ทุกอย่างควรทำงานได้ดีในขณะนี้

ปัญหานี้มักเกิดขึ้นเมื่อคุณเปลี่ยนชื่อไฟล์จากภายใน Xcode


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