Các ứng dụng dự kiến ​​sẽ có bộ điều khiển xem gốc khi kết thúc khởi chạy ứng dụng


383

Tôi nhận được lỗi sau trong bảng điều khiển của mình:

Các ứng dụng dự kiến ​​sẽ có bộ điều khiển xem gốc khi kết thúc khởi chạy ứng dụng

Dưới đây là application:didFinishLaunchWithOptionsphương pháp của tôi :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Set Background Color/Pattern
    self.window.backgroundColor = [UIColor blackColor];
    self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
    //self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];

    // Set StatusBar Color
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];

    // Add the tab bar controller's current view as a subview of the window
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

Trong Trình tạo giao diện, UITabBarControllerđại biểu của được nối với Đại biểu ứng dụng.

Bất cứ ai biết làm thế nào để khắc phục vấn đề này?


5
Thực hiện NSLog của self.tabBarControll ngay trước khi bạn thực hiện bài tập. Thông báo chỉ được kích hoạt nếu bộ điều khiển không. Nếu không, và bạn đã chắc chắn rằng các kết nối của mình là chính xác, hãy thử khởi tạo bộ điều khiển trong mã.
FeifanZ

hãy thử nhận xét việc khởi tạo Cửa sổ .. kiểm tra câu trả lời này stackoverflow.com/a/33958144/1293445
mohammad alabid

Câu trả lời:


188

Tôi có vấn đề này như nhau. Kiểm tra chính của bạn. Đối số cuối cùng phải được đặt thành tên của lớp thực hiện giao thức UIApplicationDelegate.

retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");

49
Một tùy chọn khác là đảm bảo lớp đại biểu ứng dụng được nhập chính và sử dụng NSStringFromClass. Đó là cách Xcode tạo tệp main.m. Ví dụ: #import "AppDelegate.hvà sau đóint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
sho

10
đảm bảo self.windowđược khởi tạo nhưself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Raptor

1
Tôi đã thử các tùy chọn trên, không làm việc cho tôi. Và tôi không sử dụng Storyboard.
jowie

3
Không có tác dụng đối với tôi, cùng một thông báo "Ứng dụng được mong đợi ..." sau khi thực hiện thay đổi. Giải pháp là câu trả lời của OrdoDei (xem bên trên hoặc bên dưới) đã hoạt động hoàn hảo.
Andrew

1
Nếu bạn thấy chế độ xem màu trắng trong Trình mô phỏng nhưng dự kiến ​​sẽ thấy bố cục từ bảng phân cảnh, hãy đảm bảo bạn đã loại bỏ mã trong hàm ủy nhiệm gốc của mình "ứng dụng didFinishLaunchingWithOptions ..." được chỉ ra trong main.m và chỉ "quay lại" ĐÚNG;" trong đó.
Olivier de Jrid

435

Thay thế trong AppDelegate

 [window addSubview:[someController view]];

đến

  [self.window setRootViewController:someController];

Điều này đã thoát khỏi tin nhắn cho tôi. Nó vẫn không hiển thị một cửa sổ tiếp theo nhưng đó có thể là một vấn đề khác. Cảm ơn.
Jazzmine

3
Nếu bạn đang sử dụng một UINavigationController bạn nên đầu tiên [[UINavigationController] initWithRootViewController: tableViewController] và sau đó sử dụng đoạn mã trên [self.window setRootViewController: self.navigationController] để thiết lập của cửa sổ xem gốc điều khiển
emdog4

Cocos2d có một nhận xét cho biết "// AddSubView không hoạt động trên iOS6" Vì vậy, điều này đã khắc phục nó cho tôi, vì tôi đang sử dụng iOS 6.
Almo

1
Các addSubviewdòng là một phần của dự án mẫu về một phiên bản sớm của Xcode / iOS SDK. Nếu ứng dụng quay trở lại một chặng đường dài, bạn có thể có nó ngay cả khi bạn không viết nó.
Seva Alekseyev

xin chào, tôi đang nhận được lỗi này: - *** Thất bại trong xác nhận trong - [UIApplication _runWithMainScene: quá trình liên kết: hoàn thành:], /BuildRoot/L Library / Caches / com.apple.xbs / Source / UIKit_Sim / UIKit-3,505.16 / Up 3294 cách giải quyết vấn đề này
Akash Raghani

70

Tôi đã gặp lỗi tương tự khi cố gắng thay đổi bộ điều khiển xem đầu tiên được tải trong

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Lúc đầu, tôi không thực sự biết lỗi chính xác đến từ đâu nên tôi đã thu hẹp nó và tìm ra lỗi sai. Hóa ra tôi đã cố gắng thay đổi màn hình hiển thị trước khi nó thực sự xuất hiện trên màn hình. Do đó, giải pháp là di chuyển mã này trong trình điều khiển khung nhìn gây rắc rối cho tôi

- (void)viewDidLoad

đến

- (void)viewDidAppear:(BOOL)animated

và lỗi dừng xuất hiện. Vấn đề của tôi đặc biệt là do làm một UIAlertViewchương trình.

Trong trường hợp của bạn, tôi khuyên bạn nên kiểm tra mã trong trình điều khiển chế độ xem hoạt động của tabBarContoder (vì đây có thể là một vấn đề trong trình điều khiển chế độ xem đó). Nếu điều đó không hiệu quả, hãy thử đặt cài đặt bắt đầu trong tệp nib thay vì trong mã - hoặc nếu bạn muốn thực hiện bằng mã, hãy thử di chuyển mã sang phương thức thích hợp của trình điều khiển hoạt động của tabBarContoder.

Chúc may mắn!


1
Warkst, cảm ơn câu trả lời. Trong trường hợp của tôi, tôi không thể di chuyển mã ra khỏi viewDidLoad:(không thêm cờ), tôi cũng không phải làm điều này. Bất kể, cảm ơn cho lời đề nghị!
ArtSabintsev

2
Tìm thấy điều này ngày hôm nay và rất vui vì tôi đã làm - vấn đề tương tự - đang hiển thị một khởi động trong viewDidLoad. Thay đổi để xemDidAppear và hoạt động tốt. Không chắc chắn những gì tốt hơn Apple đạt được bằng cách thay đổi điều này trong iOS5.
GuybrushThreepwood

Cảm ơn đề nghị rằng chế độ xem cảnh báo đã gây ra nó, vấn đề tương tự cũng xảy ra với tôi.
Chris

1
Bạn có thể cho chúng tôi biết bạn phải loại bỏ mã nào để sắp xếp nó không? Tôi đang sử dụng của tôi viewDidLoadcho nhiều thứ, thiết lập tất cả những thứ lần đầu tiên, chẳng hạn như thêm dữ liệu vào UITableView. Tôi không thể di chuyển nó đến viewDidAppear:vì tôi chỉ muốn nó bắn một lần.
jowie

1
Vấn đề không phải là chức năng sai. Vấn đề là bạn đã quên gọi [super viewDidLoad] trong chức năng viewDidLoad của bạn, tiêu diệt hiệu quả tải nib. Điều tương tự đã xảy ra với tôi hơn một lần.
mượn

47

Tôi đã nhận được điều này khi bắt đầu với mẫu "Ứng dụng trống" và sau đó thêm XIB theo cách thủ công. Tôi đã giải quyết nó bằng cách đặt tên Nib chính theo đề xuất của Sunny. Bước còn thiếu trong kịch bản này là loại bỏ

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

từ

application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Vì nó sẽ ghi đè lên thể hiện của cửa sổ của bạn được tạo trong tệp Xib. Điều này giả sử rằng bạn đã tạo ViewContoder và kết nối nó với cửa sổ và Đại biểu ứng dụng trong tệp XIB.


Điều này đã sửa nó cho tôi quá. Tôi đã sử dụng ứng dụng Tabbed với Storyboard mà tôi đang cố gắng thêm CoreData và gặp phải vấn đề này.
gitaarik

lol nếu tôi thêm cái này tôi nhận được hai cảnh báo rằng các cửa sổ ứng dụng dự kiến ​​sẽ có bộ điều khiển xem gốc !!
George Asda

46

Điều này đã xảy ra với tôi. Giải quyết bằng cách chỉnh sửa tập tin .plist. Chỉ định tên cơ sở tệp nib chính. (Nên là MainWindow.xib). Hy vọng điều này sẽ giúp.

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


2
Điều này làm việc cho tôi! Điều này hoạt động khi bạn tạo một dự án trống trong Xcode 4.2, nơi không có MainWindow sẽ xuất hiện và đây là cách chúng tôi phải kết nối nó.
jeevang

Vấn đề xảy ra với chúng tôi khi chúng tôi vô tình xóa dòng 'Tên cơ sở tệp nib chính' khỏi tệp 'Info.plist'. Chèn dòng này một lần nữa đã khắc phục vấn đề.
rtovars

Bạn cũng có thể thiết lập điều này trong các thuộc tính dự án. Chọn dự án, mục tiêu của bạn, bạn có thể chỉnh sửa điều này trong Tóm tắt -> Thông tin triển khai iPhone / iPad.
doekman

đây thực sự là vấn đề đối với tôi, dẫn đến nhiều vấn đề liên quan đến việc gọi viewDidLoad và viewWillAppear hai lần trên rootViewControll. Trong trường hợp của tôi, loại bỏ đây là giải pháp
whyoz

27

Tôi gặp vấn đề tương tự gần đây, khi xây dựng một dự án với ik5 sdk. Lúc đầu, nó đang được xây dựng và chạy đúng, nhưng sau đó đã xuất hiện lỗi.
Trong trường hợp của tôi, giải pháp khá đơn giản.
Điều còn thiếu, là bằng cách nào đó, thuộc tính Giao diện chính trong tab tóm tắt của mục tiêu ứng dụng của tôi đã bị xóa. Vì vậy, tôi cần phải thiết lập lại.


Nếu đây không phải là điểm chính và nếu tabBarContoder vẫn còn chưa, bạn luôn có thể lập trình tạo cửa sổ và bộ điều khiển gốc. Như một dự phòng, tôi đã thêm đoạn mã sau vào dự án của mình

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ 
    if (!window && !navigationController) {
        NSLog(@"Window and navigation controller not loaded from nib. Will be created programatically.");
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        UIViewController *viewController1, *viewController2;
        viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
        viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

        self.tabBarController = [[[UITabBarController alloc] init] autorelease];
        self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
        self.window.rootViewController = self.tabBarController;

    }
    else {
        [window addSubview:[tabBarController view]];
    }
    [self.window makeKeyAndVisible];
    return YES;
}

Điều này sẽ chỉ hoạt động nếu giải pháp của sho cũng được thực hiện.


24

Tôi đã nâng cấp lên iOS9 và bắt đầu nhận được lỗi này. Tôi đã có thể sửa nó nhưng thêm đoạn mã dưới đây vào- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
    if(window.rootViewController == nil){
        UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
        window.rootViewController = vc;
    }
}

Tôi tò mò muốn biết ứng dụng của bạn có bao nhiêu cửa sổ và nếu tất cả đều có bộ điều khiển xem gốc. Cảm ơn
DrAL3X

5
LƯU Ý : Câu trả lời này là một cách giải quyết và không khắc phục được nguyên nhân gốc. Xem stackoverflow.com/a/33958144/1116061
lipka

Bạn là một anh hùng thực sự!
dùng2161301

21

Không có gợi ý nào ở trên giải quyết được vấn đề của tôi. Của tôi là thế này:

Thêm vào:

window.rootViewController = navigationController;

sau:

[window addSubview:navigationController.view];

trong appdelegate của tôi

- (void)applicationDidFinishLaunching:(UIApplication *)application {

20
  • Chọn "Cửa sổ" trong Tệp Nib của bạn
  • Trong "Kiểm tra thuộc tính" Kiểm tra "Hiển thị khi khởi chạy"

hình ảnh! []

  • Điều này xảy ra khi tập tin ngòi của bạn được tạo bằng tay.
  • Khắc phục sự cố này hoạt động cho chế độ ngòi thông thường - không phải chế độ bảng phân cảnh

Điều này chỉ được tìm thấy trong Chế độ Storyboard, tôi nghĩ vậy.
ArtSabintsev

Không, dự án này là chế độ ngòi thường xuyên. Đây là một ảnh chụp màn hình từ Storyboard Mode. "Hiển thị khi khởi chạy" so với "Bộ điều khiển xem ban đầu".
bearMenez

3
Nếu tệp nib của cửa sổ được tạo thủ công và "hiển thị khi khởi chạy" không được chọn theo mặc định sẽ nhắc thông báo này sau khi khởi chạy ứng dụng, điều này sẽ khắc phục vấn đề của tôi!
ZYiOS

OH CẢM ƠN !!! Cuối cùng, một giải pháp cho cảnh báo khó chịu này. Ngay cả khi bạn có makeKeyAndVisiblenó cũng không giải quyết được vấn đề. CHỈ điều này giải quyết cảnh báo cho tôi. CẢM ƠN BẠN!
tacos_tacos_tacos

'Điều này xảy ra trong chế độ ngòi thông thường - không phải chế độ bảng phân cảnh` Không đúng lắm. Tôi đang phải đối mặt với vấn đề tương tự với Storyboardcũng
thesummersign

19

Cách thêm RootViewControll cho iOS5

nếu ứng dụng của bạn không sử dụng RootViewControll cho đến bây giờ, chỉ cần tạo một cái;) bằng cách nhấn File> New> New File; chọn UIViewController subclass tên nó là RootViewControll , bỏ chọn With XIB cho giao diện người dùng (giả sử bạn đã có) và đặt mã này vào AppDelegate :: didFinishLaunchingWithOptions của bạn

rootViewController = [[RootViewController alloc] init];
window.rootViewController = rootViewController;

chắc chắn - bạn phải nhập RootViewControll.h và tạo biến

đây là một bài viết hay về RootViewControll và AppDelegate,


Liên kết bài viết Cupofcocoa.com đã chết - có ý tưởng nào nếu có một bản sao ở đâu đó không?
Ríomhaire

1
điều này đã được chuyển đến binpress.com, cập nhật liên kết trong câu trả lời
rémy

Đó là một liên kết tuyệt vời. Tốt đọc và giải thích những gì đang xảy ra. Tôi cũng gặp phải vấn đề này khi sử dụng một cuốn sách cũ (vì tôi muốn tìm hiểu Objective-C trước tiên) nhưng viết mã trên XCode 7 mới nhất, không có các mẫu cũ hơn.
ibaralf

11

Tôi cũng gặp lỗi này nhưng không giống như bất kỳ câu trả lời nào được liệt kê trước đây là do tôi đã bỏ sót phương thức 'loadView' trong bộ điều khiển mới được tạo của tôi (xcode 4.2, ios5).

 //Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView  
{
}

Nó thậm chí còn nói với tôi rằng phương thức này là để tạo chế độ xem theo chương trình nhưng tôi đã bỏ lỡ nó vì nó trông rất giống với các phương thức khác như viewDidLoad mà tôi thường sử dụng, tôi không bắt được.

Để giải quyết, chỉ cần xóa phương thức đó nếu bạn không lập trình tạo cấu trúc phân cấp dạng xem hay sử dụng nib hoặc bảng phân cảnh.


Tôi có thể xác nhận rằng điều này có thể gây ra vấn đề. Tôi đã có tình huống tương tự bằng cách làm theo hướng dẫn về TableView nơi họ tạo tập hợp các đại biểu trong loadView. Sau khi di chuyển mã đó sang viewDidLoad và xóa loadView, mọi thứ bắt đầu hoạt động khi cần thiết.
Eugen

Bạn vẫn có thể sử dụng chế độ xem tải nhưng thêm [super loadView]; lúc bắt đầu
Hermann Klecker

1
Hmm ... tài liệu về loadView nói rõ rằng bạn không nên gọi siêu phương thức.
Joshua Sullivan

Tôi đã ghi đè UIViewControll mặc định trong bảng phân cảnh và thấy rằng mã mẫu để tạo một lớp con UIViewContoder có loadView được bật theo mặc định khiến tôi ... lãng phí hơn một giờ cho điều ngớ ngẩn này. Cảm ơn bạn đã đăng bài này!
slycrel

11

tôi cũng gặp vấn đề này tôi đã chạy dự án của mình trong xcode4.2.1. Tôi đã đọc tất cả các bình luận trên đó, nhưng không ai là tuyệt vời cho tôi. Sau một thời gian, tôi thấy rằng tôi đã nhận xét một đoạn mã.

//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

sau đó tôi không chú ý đến nó mọi thứ đều ổn với tôi Hy vọng điều này sẽ hữu ích cho các bạn.


Mã: "self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] giới hạn]];" gây ra một lỗi, vì vậy tôi chỉ cần xóa nó.
Grigori A.

11

Hãy chắc chắn rằng bạn có chức năng này trong đại biểu ứng dụng của bạn.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions {
   return YES;
}

Đảm bảo didFinishLaunchingWithOptions trả về CÓ. Nếu bạn tình cờ xóa dòng 'return YES', điều này sẽ gây ra lỗi. Lỗi này có thể đặc biệt phổ biến với người dùng Storyboard.


nhiều danh tiếng, đây là những gì tôi muốn (dự án trống với bảng phân cảnh)
Shtirlic

2
Tương tự ở đây. Cảm ơn. Nếu bạn tạo ứng dụng trống, phương thức này được lấp đầy bằng cách tạo cửa sổ thủ công. Điều này nên được thay đổi để chỉ cần trả về CÓ. Thx
Ben G

10

Với quan điểm đầu tiên của tôi, MenuViewControllertôi đã thêm:

MenuViewController *menuViewController = [[MenuViewController alloc]init];
self.window.rootViewController = menuViewController;

trên phương thức App Delegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}

Điều đó đã làm việc.


10

Có một chút thay đổi xung quanh iOS 5.0 hoặc hơn, yêu cầu bạn phải có bộ điều khiển xem gốc. Nếu mã của bạn dựa trên mã mẫu cũ hơn, chẳng hạn như GLES2Sample , thì không có bộ điều khiển xem gốc nào được tạo trong các mẫu mã đó.

Để sửa lỗi (ví dụ GLES2Sample), ngay trong đó applicationDidFinishLaunching, tôi tạo một bộ điều khiển xem gốc và đính kèm glView của tôi với nó.

- (void) applicationDidFinishLaunching:(UIApplication *)application
{
  // To make the 'Application windows are expected
  // to have a root view controller
  // at the end of application launch' warning go away,
  // you should have a rootviewcontroller,
  // but this app doesn't have one at all.
  window.rootViewController = [[UIViewController alloc] init];  // MAKE ONE
  window.rootViewController.view = glView; // MUST SET THIS UP OTHERWISE
  // THE ROOTVIEWCONTROLLER SEEMS TO INTERCEPT TOUCH EVENTS
}

Điều đó làm cho cảnh báo biến mất và không thực sự ảnh hưởng đến ứng dụng của bạn.


9

Hãy thử kết nối IBOutlet của bộ điều khiển thanh tab với chế độ xem gốc trong Trình tạo giao diện thay vì

self.window.rootViewController = self.tabBarController;

Nhưng thật ra tôi chưa từng thấy lỗi như vậy trước đây.


8

Tôi đã giải quyết vấn đề bằng cách thực hiện các thao tác sau (không có giải pháp nào khác ở trên giúp được):

Từ menu thả xuống được liên kết với "Giao diện chính", chọn một mục khác và sau đó chọn lại "MainWindow" sau đó xây dựng lại.

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


8

Tôi đã gặp vấn đề tương tự nhưng tôi đang sử dụng storyboard

Chỉ định của tôi storyboard InitialViewControllercho cửa sổ của tôi rootViewController.

Trong

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
UIStoryboard *stb = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
self.window.rootViewController = [stb instantiateInitialViewController];
return YES;
}

và điều này đã giải quyết vấn đề.


7

Tôi đã bắt đầu gặp vấn đề tương tự ngay sau khi nâng cấp lên Xcode 4.3 và chỉ khi bắt đầu một dự án từ đầu (tức là tạo dự án trống, sau đó tạo UIViewContoder, rồi Tạo tệp nib riêng).

Sau khi đặt TẤT CẢ các dòng tôi đã sử dụng và đảm bảo tôi có các kết nối chính xác, tôi tiếp tục gặp lỗi đó và tệp nib tôi đang cố tải qua bộ điều khiển xem (được đặt là rootContoder) không bao giờ hiển thị trong trình giả lập.

Tôi đã tạo một mẫu xem đơn thông qua Xcode và so sánh nó với mã của tôi và CUỐI CÙNG tìm thấy vấn đề!

Xcode 4.3 xuất hiện để thêm theo mặc định phương thức - (void) loadView; để phần thực hiện điều khiển xem. Sau khi đọc kỹ các bình luận bên trong nó, nó đã trở nên rõ ràng vấn đề là gì. Nhận xét được chỉ định để ghi đè phương thức loadView nếu tạo chế độ xem theo chương trình (và tôi đang diễn giải), nếu không thì không ghi đè loadView nếu sử dụng ngòi. Không có gì khác trong phương thức này, vì vậy ảnh hưởng đến tôi đã ghi đè phương thức (và không làm gì cả) KHI sử dụng tệp nib, đã báo lỗi.

GIẢI PHÁP là loại bỏ hoàn toàn phương thức loadView khỏi phần triển khai hoặc gọi phương thức cha mẹ bằng cách thêm [super loadView].

Loại bỏ nó sẽ là tốt nhất nếu sử dụng tệp NIB vì thêm bất kỳ mã nào khác sẽ có hiệu lực ghi đè lên nó.


đó chính xác là vấn đề của tôi Tôi đã thêm một triển khai loadView nhưng không gọi siêu. Có một số thay đổi mã khác, không thể nhớ những gì tôi đã làm. Tôi bị mắc kẹt trong 2 giờ vì sự thay đổi đó dường như rất vô hại.
LearnCocos2D

6

Tôi đã có thông báo lỗi tương tự trong nhật ký. Tôi đã có một UIAlertView bật lên trong ứng dụng: didFinishLaunchingWithOptions. Tôi đã giải quyết nó bằng cách trì hoãn cuộc gọi đến alertView để cho phép thời gian để bộ điều khiển xem gốc hoàn tất tải.

Trong ứng dụng: didFinishLaunchingWithOptions:

[self performSelector:@selector(callPopUp) withObject:nil afterDelay:1.0];

sẽ gọi sau 1 giây:

- (void)callPopUp
{
    // call UIAlertView
}

Cảm ơn, điều này đã giải quyết vấn đề của tôi. Bạn phải đợi để hiển thị cảnh báo cho đến khi cửa sổ được tải. Trong trường hợp của tôi, tôi vừa thực hiện [alert PerformanceSelector: @selector (show) withObject: nil afterDelay: 1.0];
Deepwinter

6

Tôi đã từng gặp vấn đề tương tự. Nếu bạn đang xây dựng một ứng dụng dựa trên cửa sổ "từ đầu" như tôi, bạn sẽ cần làm như sau: (lưu ý, đây là các bước cho Xcode 4.2.)

0. Đảm bảo rằng đại biểu ứng dụng của bạn tuân thủ giao thức UIApplicationDelegate.

Ví dụ: giả sử đại biểu của chúng tôi được gọi là MyAppDelegate. Trong MyAppDelegate.h, chúng ta nên có một cái gì đó như thế này:

@interface MyAppDelegate : 
    NSObject <UIApplicationDelegate> // etc...

1. Chỉ định đại biểu ứng dụng trong main.m

Ví dụ,

#import "MyAppDelegate.h"

int main(int argc, char *argv[])
{
  @autoreleasepool {
    return UIApplicationMain(argc, argv,
      nil, NSStringFromClass([MyAppDelegate class]));
  }
}

2. Tạo một tệp giao diện cửa sổ chính.

Để làm điều này, nhấp chuột phải vào dự án của bạn và chọn Tệp mới. Từ đó, chọn Window từ phần iOS -> Giao diện người dùng.

Sau khi thêm tệp vào dự án của bạn, hãy đi tới tóm tắt của dự án (nhấp chuột trái vào dự án; nhấp vào tóm tắt.) Trong Thông tin triển khai iPhone / iPod (và phần iPad tương ứng nếu bạn muốn) và chọn tệp giao diện mới của bạn trong " Giao diện chính "hộp tổ hợp.

3. Kết nối tất cả trong trình chỉnh sửa giao diện

Chọn tệp giao diện của bạn trong danh sách tệp để hiển thị trình chỉnh sửa giao diện.

Đảm bảo khung Tiện ích đang mở.

Thêm một Đối tượng mới bằng cách kéo Đối tượng từ danh sách Đối tượng trong ngăn Tiện ích vào khoảng trống phía trên bên dưới đối tượng Window của bạn. Chọn đối tượng. Nhấp vào Trình kiểm tra danh tính trong ngăn Tiện ích. Thay đổi Lớp thành đại biểu của ứng dụng (MyAppDelegate, trong ví dụ này.)

Đưa lên trình kiểm tra kết nối cho MyAppDelegate. Kết nối ổ cắm cửa sổ với Cửa sổ đã tồn tại trong tệp giao diện.

Bấm vào Chủ sở hữu tệp ở bên trái, rồi bấm vào Trình kiểm tra danh tính trong ngăn Tiện ích. Thay đổi lớp thànhUIApplication

Đưa trình kiểm tra kết nối cho Chủ sở hữu tệp. Kết nối ổ cắm đại biểu với đối tượng MyAppDelegate.

4. Cuối cùng, và rất quan trọng, nhấp vào đối tượng Window trong tệp giao diện. Mở thanh tra thuộc tính. Đảm bảo "Hiển thị khi khởi chạy" được chọn.

Đó là tất cả những gì tôi phải làm để khiến nó hoạt động. Chúc may mắn!


6

Nếu bạn sử dụng MTStatusBarOverlay, thì bạn sẽ gặp lỗi này.

MTStatusBarOverlay tạo một cửa sổ bổ sung ([[UIApplication sharedApplication] windows) không có bộ điều khiển gốc.

Điều này dường như không gây ra vấn đề.


Bạn có chắc chắn về điều đó không? Bạn đã thử nó chưa?
Serge Grischyov

Tôi chắc chắn rằng nó tạo ra một cửa sổ và tôi chắc chắn rằng nó không tạo ra vấn đề trong các ứng dụng của tôi.
Vorlon bối rối

Bạn có thể đặt một VC giả cho MTStatusBarOverlay để sửa nó.
Wesley

Đây chính xác là vấn đề của tôi. Tôi đã có một loại thiết lập tương tự với một cửa sổ được thêm vào một thanh thông báo và một khi tôi nhận xét rằng lỗi đã biến mất! Nó dường như vô hại trong trường hợp này.
Aaron Zinman

6

Đã nhận được lỗi tương tự sau khi thay thế UI của tôi bằng Storyboard, sử dụng XCode 4.6.3 và iOS 6.1

Đã giải quyết nó bằng cách xóa tất cả mã từ didFinishLaucnhingWithOptions trong AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

5

OrdoDei đã đưa ra một câu trả lời chính xác và có giá trị. Tôi chỉ thêm câu trả lời này để đưa ra ví dụ về didFinishLaunchingWithOptionsphương pháp sử dụng câu trả lời của anh ấy cũng như tính toán cho các nhận xét của người khác về Bộ điều khiển Điều hướng.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    // Instantiate the main menu view controller (UITableView with menu items).
    // Pass that view controller to the nav controller as the root of the nav stack.
    // This nav stack drives our *entire* app.
    UIViewController *viewController = [[XMMainMenuTableViewController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

    // Instantiate the app's window. Then get the nav controller's view into that window, and onto the screen.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // [self.window addSubview:self.navigationController.view];
    // The disabled line above was replaced by line below. Fixed Apple's complaint in log: Application windows are expected to have a root view controller at the end of application launch
    [self.window setRootViewController:self.navigationController];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

4

Điều này xảy ra với tôi vì tôi vô tình bình luận:

[self.window makeKeyAndVisible];

từ

- (BOOL)application:(UIApplication*) didFinishLaunchingWithOptions:(NSDictionary*)

4

Tôi đã có thể đặt bộ điều khiển xem ban đầu trên màn hình tóm tắt của xcode.

Nhấp vào tên dự án nhiều nhất trong trình thám hiểm tệp bên trái (cần có một biểu tượng kế hoạch chi tiết nhỏ). Trong cột trung tâm, nhấp vào tên dự án của bạn trong 'MỤC TIÊU', (cần có biểu tượng bút chì 'A' nhỏ bên cạnh). Xem trong 'Thông tin triển khai iPhone / iPod' và tìm 'Giao diện chính'. Bạn sẽ có thể chọn một tùy chọn từ trình đơn thả xuống.


4

Trên đầu câu trả lời "sho", đó là chính xác (tham số thứ tư của UIApplicationMain phải là tên của bộ điều khiển chính), tôi thêm một số nhận xét.

Gần đây tôi đã thay đổi 'mô hình' của một ứng dụng của mình từ việc sử dụng MainWindow.xib để xây dựng một cửa sổ theo chương trình. Ứng dụng đã sử dụng một mẫu cũ hơn đã tạo ra MainWindow tự động. Vì tôi muốn hỗ trợ một trình điều khiển khác cho XIB cho iPhone 5, nên việc chọn đúng XIB theo chương trình khi Đại diện ứng dụng được tạo sẽ dễ dàng hơn. Tôi cũng loại bỏ MainWindow.xib khỏi dự án.

Vấn đề là, tôi đã quên điền thông số thứ tư vào phần chính của UIApplication và tôi BỎ QUA ĐỂ XÓA MainWindow từ "Giao diện chính" tại Tóm tắt dự án.

Điều này gây ra một vấn đề LỚN: nó đưa ra cảnh báo vô hại "Ứng dụng dự kiến ​​sẽ ..." trên các thiết bị phát triển, nhưng khi nó vào App Store, nó đã bị hỏng trên điện thoại tiêu dùng, bị sập vì MainWindow không còn trong gói! Tôi đã phải yêu cầu đánh giá nhanh cho lỗi.

Một triệu chứng khác là đôi khi một khối màu trắng, giống như một UIView trống, đôi khi xuất hiện khi Cài đặt được thay đổi và ứng dụng được đặt ở phía trước. Trong iPhone 5, rõ ràng đó là một khối 320x480. Có lẽ MainWindow bị thiếu đã được tạo trong chế độ phát triển, sử dụng kích thước cũ. Tôi vừa tìm thấy lỗi này khi các báo cáo đầu tiên về sự cố đã đến hộp thư đến.

Cài đặt ứng dụng từ App Store thay vì từ XCode cho thấy ứng dụng thực sự đã bị sập và sự cố MainWindow đã tự tiết lộ trên nhật ký, vì vậy tôi có thể thấy rằng đó không phải là sự kết hợp đặc biệt giữa các thiết bị + phiên bản IOS.


4

Để thêm vào câu trả lời của Mike Flynn, kể từ khi nâng cấp lên Xcode 7 và chạy ứng dụng của tôi trên thiết bị iOS 9, tôi đã thêm nó vào (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

// Hide any window that isn't the main window
NSArray *windows = [[UIApplication sharedApplication] windows];
for (UIWindow *window in windows) {
    if (window != self.window) {
        window.hidden = YES;
    }
}

Tôi tò mò muốn biết ứng dụng của bạn có bao nhiêu cửa sổ và nếu tất cả đều có bộ điều khiển xem gốc. Cảm ơn
DrAL3X

3

Sự cố này xảy ra khi bạn không có Trình tạo giao diện được thiết lập chính xác.

Đảm bảo cửa sổ Đại biểu ứng dụng của bạn và các cửa hàng viewControll được nối lên:

Trong MainWindow.xib, giữ quyền điều khiển, nhấp vào Phân quyền ứng dụng và kéo đến đối tượng Window. Chọn cửa sổ. Giữ quyền kiểm soát và chọn lại ủy nhiệm ứng dụng, kéo đến trình điều khiển xem gốc của bạn và chọn viewContoder.


3

Lỗi này cũng xuất hiện khi chủ sở hữu tệp của MainWindow.xib được đặt không chính xác.

Chủ sở hữu tệp là UIApplication
-> đối tượng được chèn của lớp đại biểu ứng dụng với cửa sổ được kết nối với cửa sổ


Tôi đã tạo một tệp xib bằng tay và bắt đầu gặp lỗi này. Cảm ơn nhiều!
RawMean
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.