Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 未为rootViewController调用viewDidLoad_Ios_Objective C_Xcode - Fatal编程技术网

Ios 未为rootViewController调用viewDidLoad

Ios 未为rootViewController调用viewDidLoad,ios,objective-c,xcode,Ios,Objective C,Xcode,这是我的第一个iOS项目。我只是在学习XCode应用程序中代码学校的Try iOS的教程 我在我的viewDidLoad方法中添加了一个按钮。我不认为这是正常情况下添加它的地方,但它应该仍然有效。问题是,永远不会调用该方法。以下是我目前的代码: AppDelegate.m: #import "AppDelegate.h" #import "ViewController.h" @implementation AppDelegate - (BOO

这是我的第一个iOS项目。我只是在学习XCode应用程序中代码学校的Try iOS的教程

我在我的
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];
}...
AppDelegate.m:
#导入“AppDelegate.h”
#导入“ViewController.h”
@实现AppDelegate
-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项
{
//设置窗口大小和背景色
CGRect viewRect=[[UIScreen mainScreen]边界];
self.window=[[UIWindow alloc]initWithFrame:viewRect];
self.viewController=[[viewController alloc]init];
UIView*view=[[UIView alloc]initWithFrame:viewRect];
view.backgroundColor=[UIColor yellowColor];
self.viewController.view=视图;
self.window.rootViewController=self.viewController;
[self.window makeKeyAndVisible];
NSLog(@“屏幕高%f,宽%f”,viewRect.size.height,viewRect.size.width);
返回YES;
}...
AppDelegate.h:
#进口
@类视图控制器;
@接口AppDelegate:UIResponder
@属性(强,非原子)UIWindow*window;
@属性(强,非原子)ViewController*ViewController;
@结束
ViewController.m:
#导入“ViewController.h”
@界面视图控制器()
@结束
@实现视图控制器
-(无效)viewDidLoad
{
[超级视图下载];
self.view.backgroundColor=[UIColor blueColor];
UIButton*firstButton=[UIButton Button类型:UIButtonTypeRondRect];
firstButton.frame=CGRectMake(10010010044);
[firstButton setTitle:@“不单击!”状态:UIControlStateNormal];
[self.view addSubview:firstButton];
}...
当应用程序启动并运行时,我的背景保持黄色,并且没有可见的按钮

在应用程序中,
完成了启动,选项如下:
如我所料。初始化视图时,我希望viewDidLoad运行。我可能只是误解了C“发送消息”的方式

如果有任何其他信息可能会有所帮助,请让我知道。谢谢你的帮助:)

编辑
这和故事板有关吗?我处于脚本模式,但我从未使用GUI添加任何按钮查看代码,这正是应该发生的事情。创建viewController时,它会自动创建视图,因此您不想为其创建新视图。您的按钮未显示,因为它位于使用viewController创建的原始视图上,但您使用黄色视图重写了它

相反,您要做的是进入
ViewController.m
viewdiload:(BOOL)animated
并添加:

[self.view setBackgroundColor:[UIColor yellowColor]];

另外,请确保未在appDelegate中设置viewController.view。如果未设置该选项,则会自动创建视图,您可以在viewDidLoad中将按钮或任何其他视图添加到视图中。

viewDidLoad不会被调用,因为您创建视图的方式不标准。通常,视图是从xib或故事板加载的,或者是在视图控制器的loadView方法的代码中创建的——在所有这些情况下,都将调用viewDidLoad。如果将视图创建移动到控制器的.m文件中的loadView,它将工作,并且将调用viewDidLoad

编辑后:


如果您使用的是故事板,那么您的视图应该在那里创建,而不应该像在app delegate中所做的那样。事实上,当您使用故事板时,应用程序中通常没有任何代码:didFinishLaunchingWithOptions:method。

我遇到了这个问题,当我在AppDelegate的didFinishLaunchingWithOptions函数中添加一些代码时,调用了initWithCoder函数

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];(NSDictionary *)launchOptions
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MyStoryboardName" bundle:nil];
    UIViewController *initViewController = [storyboard instantiateInitialViewController];
    [self.window setRootViewController:initViewController];
。。。
self.viewController.view=视图;
…


不应在viewDidLoad之前设置viewController的视图,这会导致未调用viewDidLoad。视图应在viewDidLoad中设置,viewController将自动为您管理其视图。

谢谢,我将继续这样做。我试图学习他们的例子,但是他们可能已经被编辑过了,使这个类更容易理解。@Carder先生,奇怪的类。编辑他们的材料,使其不正确。。。你应该抓取一个好的教程(在谷歌上很容易找到,我建议Ray Wenderlich或App Coda)来掌握如何去做(我不想说“正确的方法”,但你知道我的意思)来补充@CaptJak所写的内容:我发现,很难尝试手动操作通常不是一个好主意。尽可能使用Interface Builder和苹果的惯例和工作流程,而不是仅仅为了实现这一目的而手工组装;这不仅节省了您的时间,更重要的是,您不会无意中与Objective-C/Cocoa/Xcode编程结构和约定发生冲突,这是上面代码示例中的基本问题。哦,还有:检查在线阅读的任何教程和文档的日期是一个好主意。整个iOS编程生态系统运行得非常快,因此请注意几年前发布的任何内容,因为它可能会让你走上一条过时的道路。