Storyboard không chứa bộ điều khiển xem với mã định danh


175

Tôi tiếp tục nhận được các lỗi sau:

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

Đây là mã:

- (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];
}

Tôi đã thiết lập identifiertrên UIStoryboardnhưng tôi vẫn nhận được lỗi này.

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



4
Có vẻ như bạn đặt định danh của segue, không phải bộ điều khiển xem. Bạn đang cố gắng trình bày bộ điều khiển xem nào trong bức tranh đó? Và tại sao bạn không sử dụng segue?
Firoze Lafeer

Lên đến Trình điều khiển chế độ xem hoạt động tốt .... so với khi tôi cố gắng trình bày TableViewContoder tôi gặp lỗi ...... bạn sẽ làm thế nào?
Mat

Chuyển đến Storyboard, xóa ID Storyboard đó và thêm lại. Đôi khi bạn cần dọn dẹp thư mục bản dựng và dữ liệu dẫn xuất
onmyway133

Câu trả lời:


244

Chỉ để tham khảo trong tương lai:

Tôi đang phát triển trên iOS 6 bằng Storyboards.

Tôi đã có cùng một vấn đề, nhưng tôi không thể tìm thấy trường "Định danh" trong thanh tra. Thay vào đó, chỉ cần đặt trường có tên "ID Storyboard" thành tên bạn sẽ đặt tên cho Mã định danh. Trường này có thể được tìm thấy trong tab "Hiển thị thanh tra danh tính" trong thanh tra.

[Lưu ý - nhận xét bên dưới cho biết rằng một số người đã thấy rằng họ cần (cũng vậy?) Đặt trường "ID khôi phục" ngay bên dưới ID Storyboard trong thanh tra. Nhấp vào "Sử dụng ID Storyboard" dường như là không đủ.]

Có một hình ảnh bên dưới để tham khảo: (trong trường hợp này tôi đã đặt tên định danh của mình giống với lớp của tôi) nhập mô tả hình ảnh ở đây


24
tiền XCode 4.4 trở về trước: Mã định danh; XCode 4.5: ID Storyboard
ilmiacs

cảm ơn vì thông tin của bạn. Tôi gặp khó khăn khi tìm mã định danh trong bảng phân cảnh theo các giải thích trong google, nhưng tôi không thể tìm thấy Mã định danh trong Xcode4.6. đây là vấn đề lớn đối với người mới cảm ơn.
người mới bắt đầu

4
Những gì làm việc cho tôi là sử dụng ReuseInentifier. ID Storyboard vẫn gây ra ngoại lệ con trỏ null.
Droid Chris

Trường hợp tương tự ở đây @DroidChris
Ahmed

5
kiểm tra "Sử dụng ID Storyboard" làm tôi hạnh phúc
preetam

189

Trong Xcode 7 - 11 ,

khi bạn thay đổi ID bảng phân cảnh và bạn gặp lỗi như thế này,

chỉ SẠCH dự án của bạn ( CMD+ SHIFT+ K)


13
Tại sao tôi luôn quên làm điều này? Nó khắc phục các vấn đề điên rồ nhất. Cảm ơn, Ted, đã nhắc nhở tôi!
AlphaCodaSeven

2
Sự cố này xảy ra trong XCode 7.2 khi lấy từ một repo trong đó một VC trong bảng phân cảnh đã được gán một mã định danh. Làm sạch dự án dường như để giải quyết vấn đề.
Ed George

2
Tôi nghĩ rằng tôi đã mất trí ... một sự khác biệt đơn giản không hoạt động, điều này đã tạo ra mánh khóe.
dokun1

2
Vâng, nó hoạt động !!!! đôi khi làm sạch dự án xcode sẽ xóa tham chiếu không mong muốn đến dự án
kiran

3
Tôi đến từ Android Studio và phát triển Android. Thật điên rồ khi tôi phải sử dụng bao nhiêu hack trong XCode và Swift. Tôi thực sự phải khóc. Nghiêm túc.
ktamas

43

Đã sửa! Không chỉ phải đặt mã định danh trong segue, trong trường hợp của tôi DrivingDetails, mà cả mã định danh trong bảngViewControll của tôi phải được đặt là DrivingDetails ... hãy kiểm tra ảnh của tôi:

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

Tôi cũng đã gỡ bỏ bộ điều khiển chế độ xem điều hướng để bây giờ bộ điều khiển xem 2 bảng được kết nối trực tiếp với hình ảnh động "đẩy".

***** CHỈNH SỬA cho XCODE 7.0 *****

bạn phải đặt StoryboardId (trong trường hợp này, viewContoder được nhúng trong bộ điều khiển Điều hướng:

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

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


2
Tôi đang gặp vấn đề tương tự với câu hỏi này nhưng khi tôi đi đến trình kiểm tra thuộc tính tôi không thấy 2 trường như trong màn hình của bạn chỉ bắn một trường Tiêu đề, không có trường định danh
Anon957

bạn đã xem câu trả lời ở trên chưa? Tôi nghĩ là cập nhật hơn. Cảm ơn
Mat

1
Mã định danh cho segue không liên quan gì đến điều này. Chỉ ID Storyboard cho bộ điều khiển xem cần được đặt trong bảng phân cảnh.
Jawwad

Có thể liên quan. Trong iOS7 [storyboard instantiateViewControllerWithIdentifier]KHÔNG khởi tạo các chế độ xem từ Trình tạo giao diện bên trong trình điều khiển chế độ xem; nhưng trong iOS6 thì có
William Entriken

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

Ghi chú:

  • "StoryboardFileName"tên tệp của Storyboard chứ không phải ID của Storyboard!
  • "StoryboardID"là ID bạn đã đặt thủ công trong trình kiểm tra danh tính cho bảng phân cảnh đó (xem ảnh chụp màn hình bên dưới).

ID bảng phân cảnh

Đôi khi mọi người tin rằng cái đầu tiên là ID Storyboard và cái thứ hai là tên lớp View Controller, vì vậy hãy lưu ý sự khác biệt.


1
Điều này!! Người đàn ông của tôi, bạn vừa giải quyết bí ẩn 18 giờ của tôi. Cảm ơn bạn đã giải thích ngắn gọn.
mrfevrier

1
Chúa ơi Cảm ơn vì điều đó! .instantiateViewController(withIdentifier: "StoryboardID")nên được đổi tên thành .instantiateStoryboard(withIdentifier: "StoryboardID")Hoặc chỉ một cái gì đó đơn giản hơnUIStoryboard(name: "StoryboardFileName", bundle: nil).init()
roosevelt

16

Danh tính nằm trong tab Trình kiểm tra danh tính có tên ID Storyboard cho Xcode 6.3.2 và được chọn tùy chọn Sử dụng ID Storyboard. nhập mô tả hình ảnh ở đây


Đây là vấn đề tất cả cùng, điều này làm việc ở cả hai nơi tôi đang gặp vấn đề. Không chỉ giá trị ID Storyboard được đặt, bạn cần kiểm tra 'Sử dụng ID Storyboard'
Tyler Hack

"Sử dụng ID Storyboard" là phần quan trọng còn thiếu đối với tôi. Cảm ơn bạn.
Marcy

9

Chỉ có vấn đề này sau khi thêm một VC mới vào bảng phân cảnh nhưng chỉ trên thiết bị, không phải trên trình giả lập. Hóa ra đó là do có nhiều bản địa hóa bảng phân cảnh - VC chỉ được thêm vào bản chính. Tôi đã thử xóa các bản địa hóa khác (một trong số đó là iPhone của tôi sử dụng) nhưng vẫn gặp lỗi. Cuối cùng, tôi phải tạo lại các bản địa hóa khác với VC mới trong mỗi bản.


5

Trình biên dịch hiển thị lỗi sau:

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

Ở đây, đối tượng của bảng phân cảnh được tạo không phải là bảng phân cảnh chính có chứa ViewControllers của chúng tôi. Như tập tin bảng phân cảnh mà chúng tôi làm việc được đặt tên là Main.storyboard . Vì vậy, chúng ta cần phải có tài liệu tham khảo về đối tượng của Main.storyboard .

Sử dụng mã sau đây cho điều đó:

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

Dưới đây storyboardWithNamelà tên của tệp bảng phân cảnh mà chúng tôi đang làm việc và bundlechỉ định gói trong đó bảng phân cảnh của chúng tôi (nghĩa là mainBundle).


5

Đối với những người có cùng vấn đề với @Ravi Bhanushali, đây là giải pháp Swift 4:

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


Điều này nên được thêm một nhận xét về câu trả lời của @Ravi.
Sunil

Tôi sẽ có nhưng không có danh tiếng. Một người có đủ danh tiếng được chào đón nhiều hơn thế
confitz20

4

Tôi đã tìm thấy nó ... nhấp vào trình điều khiển chế độ xem trong bảng phân cảnh, nhấp vào biểu tượng thứ ba từ bên trái trên trình kiểm tra thuộc tính vc - tên mà bạn đặt tên cuộc gọi trên đó cho biết 'danh tính' - tôi đã bị ẩn, tôi phải nhấp vào nhận dạng từ, sau đó hiển thị StoryboardID - thêm mã định danh từ mã, xong


4

Sửa đổi "ID bảng phân cảnh" trong trình kiểm tra danh tính (biểu tượng thứ 3 ở bên trái) sẽ hoạt động.

Nếu không và bạn chắc chắn không có lỗi đánh máy, hãy thử làm sạch dự án ("Sản phẩm" -> "Làm sạch" hoặc đơn giản là lệnh + shift + K).


cứu cuộc đời tôi. cảm ơn. (đặc biệt là phần về dọn dẹp)
Jay

1

Trong khi nhập mã định danh u chưa chọn bộ điều khiển xem thích hợp, chỉ cần kiểm tra một lần nếu thực hiện lại quy trình một lần nữa.


Tôi nên chọn bộ điều khiển xem nào? xin lỗi, tôi đang bối rối
Mat

TableViewControll * controller = [self.storyboard InstantiateViewControllWithIdentifier: @ "driveDetails"]; control.title = [[dao libraryItemAt Index: indexPath.row] valueForKey: @ "name"]; [self.navestionControll PushViewCont điều khiển: bộ điều khiển hoạt hình: CÓ]; như thế này?
Mat

Theo hình ảnh TableViewContoder nên được chọn vì bạn đang làm để hiển thị chi tiết trong bộ điều khiển đó.
iamsult

Từng bước giải thích về bảng câu chuyện được đưa ra raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1
iamsult

1
Chỉ cần lưu ý một chút định danh segue của bạn và định danh bộ điều khiển xem là khác nhau. Tôi chỉ muốn làm nổi bật rằng có một số nhầm lẫn vì bạn đang sử dụng cùng một tên cho cả hai. Mã định danh segue của bạn nên được sử dụng trong readyForSegue và định danh bộ điều khiển xem của bạn là để tải trực tiếp các khung nhìn từ bảng phân cảnh của bạn. scott-sherwood.com/?p=219
Scott Sherwood

1

Một vài bộ điều khiển xem của tôi bị thiếu thuộc tính StoryboardIdentifier .

Trước:

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

Sau:

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

0

Tôi đã gặp lỗi tương tự và tôi có thể sửa lỗi này bằng cách thay đổi các thay đổi sau trong dự án của mình. Tôi đã đề cập đến tên lớp của tôi trong bảng thanh tra sau đó vấn đề được giải quyết. Goto-> bảng bên phải có Trình kiểm tra danh tính Trong phần lớp tùy chỉnh

class: tên lớp của bạn (ViewContoder)

Trong ID bảng phân cảnh phần Danh tính: ID bảng phân cảnh của bạn (Tên viewContoder)

Sau khi nhấp vào tùy chọn Sử dụng ID bảng phân cảnh ở đó. Vấn đề đã kết thúc. Tôi hy vọng nó sẽ giúp bạn....



0

rất đơn giản, chọn bộ điều khiển khung nhìn tương ứng trong bảng câu chuyện chính và kiểm tra StoryboardID nếu hiện tại của nó sử dụng nó trong bộ nhận dạng của việc đặt tên và sử dụng nó.

Ở đây, người đầu tiên của tôi là StoryboardID, hãy để vc = self.storyboard? .instantiateViewControll (withIdentifier: "Firstone") là! tabBarViewControll


0

Tôi đã thử tất cả các giải pháp trên và không có giải pháp nào hiệu quả.

Những gì tôi đã làm là:

  • Dự án sạch
  • Xóa dữ liệu dẫn xuất
  • Khởi động lại Xcode
  • Nhập lại StoryboardID được hiển thị trong các câu trả lời trước (bên trong IB).

Và sau đó nó hoạt động. Điều gây sốc là tôi đã nhập ID Storyboar trong trình tạo giao diện và nó đã bị xóa / xóa sau khi mở lại Xcode.

Hy vọng điều này sẽ giúp được ai đó.


0

Dọn dẹp tất cả mọi thứ và đóng Xcode không giải quyết được vấn đề cho tôi.

Tôi đã phải xóa viewContoder và tạo một cái mới với mã định danh mới.


0

Lưu ý: Nếu bạn sử dụng cocoapods trong dự án của bạn, thì trước tiên hãy chạypod deintegraterm Podfile.lock

Sau đó mở thư mục dự án của bạn trong bất kỳ trình soạn thảo mã bên thứ ba nào như VSCode và thực hiện tìm kiếm toàn cầu cho tên ViewContoder ném lỗi.

  1. Đổi tên / sửa bất kỳ tên sai mà bạn tìm thấy.
  2. Lưu tất cả các thay đổi.
  3. Làm sạch và xây dựng dự án của bạn.

Mọi thứ nên hoạt động tốt bây giờ.

Điều này thường xảy ra khi bạn đổi tên các tệp từ trong Xcode.


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.