iOS 7 - Không thể khởi tạo bộ điều khiển chế độ xem mặc định


93

Tôi đang sử dụng Xcode 5 trong một ứng dụng mới được tạo và khi tôi vừa tạo nó, tôi nhấp vào nút chạy và nhấp vào nó, sau đó dự án được xây dựng nhưng nó không hiển thị trong Trình mô phỏng iOS và tôi nhận được thông báo sau:

 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?

Tất nhiên, tôi đã Googled về nó và mọi người đều chỉ ra rằng điều này đang xảy ra bởi vì XCode chưa biết bộ điều khiển chế độ xem nào là bộ điều khiển ban đầu. Nhưng điều kỳ lạ là tôi đã tạo ứng dụng dưới dạng ứng dụng dựa trên trang (cũng đã thử các tùy chọn ứng dụng xem một lần và theo thẻ) và XCode đã xác định Bảng phân cảnh cho nó.

Ngoài ra, khi tôi đi đến tùy chọn giao diện chính của dự án, bảng phân cảnh (được đặt tên là "Chính" bởi chính Xcode) và trong Bảng phân cảnh, bộ điều khiển chế độ xem của tôi được đặt là "Bộ điều khiển chế độ xem ban đầu"

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

Chuyện gì thế?


cố gắng thiết lập nó theo chương trình ...
Shamsudheen TK

@Ramshad Xin chào, tôi là người mới phát triển iOS. Làm thế nào tôi có thể làm điều đó?
rodrigoalvesvieira


2
Đảm bảo đặt bộ điều khiển chế độ xem thành bộ điều khiển chế độ xem ban đầu.
Sandeep

Như Kashif Ahmed đã chỉ ra, bạn cũng cần mở tệp Info.plist của mình dưới dạng mã nguồn và chỉnh sửa chuỗi <key> UISceneStoryboardFile </key> và cung cấp ở đó tên bảng phân cảnh mới của bạn.
bogdan

Câu trả lời:


56

Vì vậy, điều này cũng xảy ra với tôi. Tôi đã kiểm tra 50 lần và "Là bộ điều khiển chế độ xem ban đầu" của tôi đã được kiểm tra, tin tôi đi. Nó đã xảy ra một cách bất ngờ. Vậy tôi đã sửa nó như thế nào?

  1. Tạo Bảng phân cảnh mới trong dự án của bạn, đặt tên nó như Main_iPhoneV2 (hoặc iPadV2 tùy thuộc vào kiểu bảng phân cảnh ban đầu của bạn)
  2. Mở bảng phân cảnh bị hỏng, nhấp vào bất kỳ đâu trong vùng màu trắng và nhấn lệnh-a, sau đó nhấn lệnh-c (chọn tất cả và sao chép)
  3. Mở bảng phân cảnh mới của bạn và nhấn command-v để dán cùng một thiết lập chính xác
  4. Đi tới cài đặt dự án của bạn, thay đổi "Giao diện chính" thành Main_iPhoneV2 mới (Nếu đó là iPad của bạn và bạn đang viết một ứng dụng toàn cầu, bạn sẽ phải chỉnh sửa -Info.plist và tìm kiếm giá trị "Tệp bảng phân cảnh chính tên cơ sở (iPad)
  5. Biên dịch lại và ngừng nhổ tóc

3
gặp sự cố tương tự khi thử các bước được liệt kê trong Kiến thức cơ bản về nhà phát triển. Đã tạo Bảng phân cảnh mới, đánh dấu bảng mới làm bộ điều khiển chế độ xem ban đầu và đặt bảng mới làm Bảng phân cảnh chính thông qua Thông tin triển khai dự án. Nó bắt đầu hoạt động một cách kỳ diệu. Không chắc liệu nó có một số lỗi với Xcode hay không. developer.apple.com/library/ios/referencelibrary/GettingStarted/…
ioWint

Điều này không hoạt động hoặc tôi tin rằng sẽ không hoạt động, trừ khi và cho đến khi bộ điều khiển điều hướng ban đầu được đặt là "là Inital View Controller".
Sumit Kumar Saha

Tôi sẽ thử cái này. Nhưng sau đó tôi đã làm sạch và xây dựng lại và nó hoạt động
Skywalker

305

Kiểm tra Là Bộ điều khiển Chế độ xem Ban đầu trong Trình kiểm tra Thuộc tính.

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


Tất nhiên đây là 'cách nó sẽ hoạt động'. Nhưng tôi cũng gặp phải 'lỗi' và sau đó điều này không hoạt động. Tạo một cái mới và sao chép tất cả nội dung của bạn đã hoạt động! trong trường hợp của tôi.
Tys

Nhưng bộ điều khiển chế độ xem của anh ấy đã được đặt làm Bộ điều khiển chế độ xem ban đầu, phải không?
Iurii Vasylenko

@YuraVasylenko: Nó không có trước đây, vì vậy tôi đã chỉ định bằng dấu như đã chọn.
Ashvin Ajadiya

1
Chỉ cần để làm cho nó chi tiết hơn một chút cho những người cần nó, Thiết Controller ban đầu cho một Storyboard
Sergei Basharov

40

Đầu tiên hãy nhấp vào View Controller ở thanh Tiện ích bên phải . Tiếp theo chọn Trình kiểm tra Thuộc tính và đảm bảo rằng trong phần Bộ điều khiển Chế độ xem, hộp kiểm 'Là Bộ điều khiển Chế độ xem Ban đầu' được chọn!


1
Đây là vấn đề của tôi. Tôi đã xóa bộ điều khiển chế độ xem mặc định mà bảng phân cảnh của tôi có và khi tôi thêm bộ điều khiển khác phải kiểm tra điều này.
Orgmir

17

Cảnh báo này cũng được báo cáo nếu bạn có một số mã như:

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.rootViewController = myAwesomeRootViewController
    window?.makeKeyAndVisible()

Trong trường hợp này, hãy chuyển đến trang đầu tiên của cài đặt mục tiêu và đặt Main Interfacethành trống, vì bạn không cần mục nhập bảng phân cảnh cho ứng dụng của mình.


14

Sử dụng Trình tạo giao diện:

Kiểm tra xem 'Bộ điều khiển chế độ xem ban đầu có được đặt hay không. Bạn có thể đặt nó bằng các bước sau:

  1. Chọn bộ điều khiển chế độ xem của bạn (sẽ xuất hiện dưới dạng màn hình ban đầu).
  2. Chọn Trình kiểm tra thuộc tính từ cửa sổ Tiện ích .
  3. Chọn ' Là bộ điều khiển chế độ xem ban đầu ' từ phần Bộ điều khiển chế độ xem (nếu không).

Nếu bạn đã thực hiện bước này mà vẫn gặp lỗi thì uncheck and do it again.

Các bước giải quyết vấn đề

Sử dụng có lập trình:

Mục tiêu-C:

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

Swift:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true

3
Nếu bạn làm điều đó theo chương trình, hãy đảm bảo xóa bảng phân cảnh của bạn khỏi Giao diện chính của mục tiêu - chỉ cần để trống. Ngoài ra điều này nên đi vào didFinishLaunchingWithOptions.
Jordan H

@JordanH làm cách nào để xóa bảng phân cảnh khỏi các mục tiêu Giao diện chính?
PascalS

@Passe Chọn văn bản và nhấn xóa, nó nằm trong tab Chung
Jordan H

12

Tôi đã gặp phải vấn đề này với Bộ điều khiển thanh tab của tôi không xuất hiện trong Trình mô phỏng cùng với màn hình đen. Tôi đã làm như sau để ứng dụng của mình xuất hiện trong Trình mô phỏng.

  1. Truy cập Main.storyboard.
  2. Kiểm tra trong Is Initial View Controllertab Trình kiểm tra thuộc tính.

Là Bộ điều khiển Chế độ xem Ban đầu trong Trình kiểm tra Thuộc tính.


10

Thiết lập cửa sổ theo cách thủ công,

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (!application.keyWindow.rootViewController) 
     {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];

         application.keyWindow.rootViewController = myViewController;
     }
}

Điều này có yêu cầu bỏ chọn bộ điều khiển chế độ xem ban đầu trong bảng phân cảnh không?
bdv

7

Tôi gặp lỗi này khi thay đổi tên tệp bảng phân cảnh " Main.storyboard " THÀNH: " XXX.storyboard "

Giải pháp cho tôi là:

  • Sản phẩm-> Sạch sẽ
  • THAY ĐỔI: Hỗ trợ tập tin -> info.plist -> Main storyboard tên cơ sở tập tin -> Main ĐẾN: XXX

Chúc may mắn



3

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

Ngoài câu trả lời đúng ở trên, hãy đảm bảo rằng bạn đã đặt đúng Giao diện chính nói chung.


3

Lựa chọn đầu tiên

nếu bạn muốn đặt bảng phân cảnh tùy chỉnh của mình thay vì bộ điều khiển chế độ xem mặc định.

Thay đổi thuộc tính này từ tệp info.plist

<key>UISceneStoryboardFile</key> <string>Onboarding</string>

Giới thiệu sẽ là tên bảng phân cảnh của bạn

để mở, nhấp chuột phải vào tệp info.plist và mở dưới dạng mã nguồn

Lựa chọn thứ 2

1- Nhấp vào dự án của bạn

2- Chọn dự án của bạn từ phần mục tiêu

3- Chuyển đến phần giao diện Triển khai

4- Thay đổi phần bảng phân cảnh của bạn từ trường Giao diện chính

Hãy nhớ đặt bộ điều khiển chế độ xem ban đầu của bảng phân cảnh của bạn


1
Điều <key> UISceneStoryboardFile </key> đã sửa nó cho tôi. Cảm ơn.
bogdan

2

Nếu bạn đã thêm bảng phân cảnh mới thì bạn phải kiểm tra các điểm sau.

1) Trong tệp plist của bạn, hãy kiểm tra giá trị của tên cơ sở tệp bảng phân cảnh chính (iPad) hoặc (iPhone) phải khớp với tên tệp bảng phân cảnh của bạn ( không thêm phần mở rộng .storyboard )

2) Trong bảng phân cảnh nên có một bộ điều khiển chế độ xem được đặt là Bộ điều khiển chế độ xem ban đầu

3) Làm sạch và xây dựng dự án của bạn. :)

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


1

Nếu bạn đã cam kết mã của mình để kiểm soát nguồn thường xuyên, điều này có thể giúp bạn tiết kiệm được những rắc rối khi tạo Bảng phân cảnh mới và có thể gây ra nhiều vấn đề hơn ...

Tôi có thể giải quyết vấn đề này bằng cách so sánh mã nguồn Git của phiên bản hoạt động với mã bị hỏng. Sự khác biệt cho thấy rằng dòng đầu tiên phải chứa Id của bộ điều khiển chế độ xem ban đầu, trong trường hợp của tôi, initialViewController = "Q7U-eo-vxw" . Tôi đã tìm kiếm qua mã nguồn để chắc chắn rằng id tồn tại. Tất cả những gì tôi phải làm là đặt nó trở lại và mọi thứ hoạt động trở lại!

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
    <dependencies>
        <deployment defaultVersion="1296" identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
    </dependencies>
    <scenes>

Dưới đây là một số bước có thể giúp bạn khắc phục sự cố:

  1. Nhấp chuột phải vào Bảng phân cảnh không thành công và sử dụng Kiểm soát nguồn> Cam kết ... để duy trì các thay đổi của bạn kể từ lần cam kết cuối cùng.
  2. Hãy thử nhấp chuột phải vào Bảng phân cảnh không thành công của bạn và sử dụng "Mở dưới dạng> Mã nguồn" để xem XML của bảng phân cảnh.
  3. Trong phần tử tài liệu , hãy tìm thuộc tính có tên " initialViewController ". Nếu nó bị thiếu, đừng lo lắng, chúng tôi sẽ khắc phục điều đó. Nếu nó ở đó, hãy nhấp đúp vào id được gán cho nó, command-c để sao chép nó, command-f command-v để tìm kiếm nó sâu hơn trong tài liệu. Đây là định danh của bộ điều khiển sẽ cung cấp chế độ xem ban đầu. Nếu nó không được xác định trong tài liệu thì đó là một vấn đề - bạn nên xóa nó khỏi thẻ tài liệu, trong trường hợp của tôi là initialViewController = "Q7U-eo-vxw" .
  4. Chuyển đến mục menu Xcode có tên là Xem và chọn Trình chỉnh sửa phiên bản> Hiển thị chế độ xem so sánh
  5. Điều này hiển thị phiên bản địa phương của bạn ở bên trái và phiên bản lịch sử ở bên phải. Nhấp vào ngày bên dưới phiên bản lịch sử để nhận danh sách các cam kết cho bảng câu chuyện này. Chọn một cái mà bạn biết là đã hoạt động và so sánh phần tử tài liệu . Id của * initialViewController là gì? Nó có khác không? Nếu vậy, hãy thử chỉnh sửa lại bằng tay và chạy. công cụ so sánh lịch sử xcode đang hoạt động

1

Kiểm tra xem bạn có cửa sổ var trong AppDelegate hay không.

var window: UIWindow? 

Và cũng kiểm tra bảng phân cảnh của tệp Info.plist của bạn.

<key>UIMainStoryboardFile</key>
<string>Main</string>

Cài đặt rootViewController theo chương trình trong AppDelegate sẽ không khắc phục được cảnh báo. Bạn nên chọn để bảng phân cảnh đặt bộ điều khiển chế độ xem hay thực hiện theo lập trình.


1

Các dự án được tạo trong Xcode 11 trở lên, chỉ cần thay đổi tệp Giao diện Chính từ cài đặt dự án là không đủ.

Bạn phải chỉnh sửa thủ công tệp Info.plist và đặt tên bảng phân cảnh cho tệp này UISceneStoryboardFile.


0

Không có cách nào ở trên giải quyết được vấn đề cho tôi. Trong trường hợp của tôi, nó cũng không đặt đúng tệp kê khai cảnh ứng dụng.

Tôi đã phải thay đổi LoginScreen từng là Chính

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

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.