【问题标题】:iphone instance / class method issueiphone实例/类方法问题
【发布时间】:2010-03-19 02:36:48
【问题描述】:

好的,所以我有一个 viewController 方法,它有一些使用界面生成器创建的元素和一些我自己编写的代码。

我在 IB 中创建了一个视图...我们称之为 viewOne。我创建了一个循环来创建按钮(通过代码)并将它们放在单独的视图(viewTwo)上。这是在类方法中完成的。但是,我希望每次单击其中一个按钮时都打开我创建的视图。所以我做了:

[button addTarget:self action:@selector(woogoo:)
             forControlEvents:UIControlEventTouchUpInside];

woogoo 类执行以下操作:

+(void) woogoo:(id)sender { 
    //back button
    [self.view addSubview:viewOne]
}

但是,单击按钮时程序会崩溃。我确实尝试让 woogoo 成为实例方法,但在这种情况下它也会崩溃。我要做的就是在单击按钮时显示 viewOne 。有什么想法我能做什么?

【问题讨论】:

  • 当你把它作为一个实例方法时,你会得到什么错误?
  • 当我将 woogoo 设为实例方法时。我在控制台中收到此消息:2010-03-19 00:16:17.258 InstantNavigatee[85979:207] *** +[HomeViewController woogoo:] :无法识别的选择器发送到类 0xc7b8 2010-03-19 00:16:17.259 InstantNavigatore[85979:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** + [HomeViewController woogoo:]:无法识别选择器发送到类 0xc7b8'

标签: iphone uiview uibutton


【解决方案1】:

相反,您为什么不将界面构建器中的 IBAction 连接到按钮,然后您只需将 [self.view addSubview:viewOne];进入该 IBAction 方法。

PS。您在 [self.view addSubview:viewOne] 之后缺少分号

干杯

【讨论】:

  • 我不是通过界面构建​​器中的 IBAction 来完成的,因为我正在创建的按钮不断被创建。基本上,这部分应用程序是“通知”部分。因此,当用户创建通知时,会制作一个新按钮并将其放置在屏幕上。我真的不能那样调用 IBAction。
【解决方案2】:

没有足够的信息,但我猜你在 woogoo 时“viewOne”的内容有问题。在 addSubview 之前添加这一行,看看你在控制台上得到了什么:

NSLog("woogoo: %@", viewOne);

您应该会看到类似这样的内容,它与您为 viewOne 创建的视图类型和框架相匹配。如果您看到 (null) 或其他内容,请检查 viewOne 是如何设置的。

<UIView: 0x4519b70; frame = (10 1; 300 43); layer = <CALayer: 0x4519540>>

也许您可以发布有关 viewOne 如何/何时创建/初始化的更多信息。

【讨论】:

    【解决方案3】:

    +woogoo: 中,您调用self.view。既然是类方法,那么self也是类,所以+view也一定是类方法。你把它做成类方法了吗?

    如果不是,则需要将-woogoo: 设为实例方法,并将调用-addTarget:… 的代码设为实例方法,并向上传播。

    【讨论】:

      猜你喜欢
      • 2012-04-04
      • 1970-01-01
      • 2014-11-10
      • 2011-01-10
      • 2015-07-09
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多