【问题标题】:xcode viewDidLoadxcode viewDidLoad
【发布时间】:2012-03-17 21:54:04
【问题描述】:

我被 Objective-C 弄湿了。并认为我会玩 iphone 开发。 我有一个 Page Controller.h 和 .m

在我的实现文件中,我在 viewDidLoad 方法中抛出了一个 UIButton。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // content that loads in view
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    myButton.frame = CGRectMake(10, 160, 300, 44); 
    [myButton setTitle:@"Press Me!" forState:UIControlStateNormal];
    myButton.titleLabel.font = [UIFont systemFontOfSize:14];

    // add to a view
    [self.view addSubview:myButton];


}

到目前为止,它显示良好。这让我想知道 loadView 与 viewDidLoad 之间的区别。

另外,我想在按下按钮时运行我自己的函数,但我经常从 xcode 收到可执行错误。

这是我在上面的代码中插入的内容:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // content that loads in view
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    myButton.frame = CGRectMake(10, 160, 300, 44); 
    [myButton setTitle:@"Press Me!" forState:UIControlStateNormal];
    myButton.titleLabel.font = [UIFont systemFontOfSize:14];

    //added this
    [myButton addTarget:self action:@selector(runClick) forControlEvents:UIControlEventTouchUpInside];


    // add to a view
    [self.view addSubview:myButton];


}

-(void)runClick{

    NSLog(@"does this work?");

}

有人觉得有什么不合适的吗?

另外,在 PageController.h 中我添加了:-(void)runClick;

这是我发现的错误:

2012-03-17 16:04:30.077 Blah[510:207] -[__NSCFString runClick]:无法识别的选择器发送到实例 0x6a0b4f0

【问题讨论】:

  • 什么是可执行错误?
  • this: 2012-03-17 16:04:30.077 Blah[510:207] -[__NSCFString runClick]: 无法识别的选择器发送到实例 0x6a0b4f0

标签: xcode uibutton viewdidload


【解决方案1】:

关于loadView和viewDidLoad的区别:

  • 根据 Apple 的说法,控制器(不是您!)在请求视图并且它为 nil 时调用此方法。因此,它将创建并加载视图。
  • 您可以覆盖 loadView 以创建自己的视图(如果您没有该控制器的 nib)
  • 如果您想通过 nib 文件向视图控制器创建的视图添加某些内容,请在 viewDidLoad 上执行,然后在 viewDidUnload 上将其删除。

关于错误,您能提供更多信息吗?你在调试吗?它崩溃的线路是什么?

【讨论】:

    【解决方案2】:

    您是否在 .h 文件中声明了 -(void)runClick? (很明显的问题)。

    另外,如果你想访问控件的属性(比如它是一个滑块等),你需要添加发送者位:

    -(void)runClick (id)sender

    【讨论】:

      【解决方案3】:

      我相信你需要在runClick之后添加一个冒号,如下所示:

      action:@selector(runClick:) 
      

      【讨论】:

      • : 仅在 selector 接受参数时才需要。所以在这个问题的情况下,函数- (void) runClick { }不需要使用:调用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多