ios - 没有为 rootViewController 调用 viewDidLoad

标签 ios objective-c xcode

这是我的第一个 iOS 项目。我只是在我的 XCode 应用程序中按照 Try iOS at codeschool 中的教程进行操作。

我在我的 viewDidLoad 方法中添加了一个按钮。我不认为这是通常添加它的地方,但它应该仍然有效。问题是,该方法从未被调用。到目前为止,这是我的代码:

AppDelegate.m:

    #import "AppDelegate.h"
#import "ViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Set window size & background color
    CGRect viewRect = [[UIScreen mainScreen] bounds];
    self.window = [[UIWindow alloc] initWithFrame:viewRect];
    self.viewController = [[ViewController alloc] init];
    UIView *view = [[UIView alloc] initWithFrame:viewRect];
    
    view.backgroundColor = [UIColor yellowColor];
    
    self.viewController.view = view;
    
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    
    NSLog(@"Screen is %f tall and %f wide", viewRect.size.height, viewRect.size.width);

    return YES;
}...


AppDelegate.h:

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;

@end



ViewController.m:

    #import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blueColor];
    
    UIButton *firstButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    firstButton.frame = CGRectMake(100, 100, 100, 44);
    [firstButton setTitle:@"Don't Click!" forState:UIControlStateNormal];
    [self.view addSubview:firstButton];
}...

当应用程序启动并运行时,我的背景仍然是黄色,并且没有可见的按钮。

单步执行应用程序,didFinishLaunchingWithOptions: 按我的预期命中。当 View 初始化时,我希望 viewDidLoad 运行。我可能只是误解了 C“发送消息”的方式。

如果任何其他信息可能有帮助,请告诉我。感谢您的帮助:)

编辑

这和 Storyboard有关系吗?我处于 Storyboard模式,但我从未使用 GUI 添加任何按钮

最佳答案

viewDidLoad 未被调用,因为您创建其 View 的方式不标准。通常, View 是从 xib 或 Storyboard加载的,或者是在 View Controller 的 loadView 方法中用代码创建的——在所有这些情况下,将调用 viewDidLoad。如果您将 View 创建移动到 Controller 的 .m 文件中的 loadView,它将起作用,并且将调用 viewDidLoad。

编辑后:

如果您使用的是 Storyboard,您的 View 应该在那里创建,并且您不应该在应用程序委托(delegate)中执行您正在执行的操作。事实上,当您使用 Storyboard时,application:didFinishLaunchingWithOptions: 方法中通常没有任何代码。

关于ios - 没有为 rootViewController 调用 viewDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178177/

相关文章:

ios - 自动布局 : Set height View depends on other height View

objective-c - 基于文档的应用程序中的粗体 + 斜体快捷方式

ios - UILocalNotifications 算法

ios - 如何使用 iOS 音效管理音量?

ios - 我怎样才能继续播放 UILocalNotification 声音直到用户关闭它?

ios - 带有 Swift 5.0 编译器的 Xcode 10.2 - 协议(protocol)继承问题

ios - 当我在 xcode 中更改 ImageView 的颜色时,它在 Storyboard 上没有改变,这是为什么?

ios - 动态添加内容到 UIScrollView

ios - 当上面有其他内容且大小灵活时,objc xcode 设置 uitableview 单元格的 y 起始位置

iphone - 同一库的重复符号 XCode 重复库?