【问题标题】:Objective C custom class methods not being called未调用目标 C 自定义类方法
【发布时间】:2011-09-09 15:19:42
【问题描述】:

所以我有这个自定义类,只有一个执行 nslog 的测试方法。我将在我的应用程序中多次重复使用此方法。界面是这样的。

@interface TestViewController: UIViewController {  CMImageMover * imageMover }

然后在视图中确实加载了我:

imageMover = [[CmImageMover alloc] init];

如果我这样做:

[imageMover testMethod];

在 alloc 和 init 之后,它在 viewDidLoad 函数中工作,但如果我从视图控制器中的另一个函数再次调用它,则没有任何作用,并且不会调用类方法。

我在这里做错了什么。我声明的每个其他变量都像 NSArray/NSTimer 一样,我按照自己的方式进行操作,并且可以在整个控制器中访问和使用它。

【问题讨论】:

  • 您能否提供一个无法调用 testMethod 的函数体?
  • 您应该向我们展示调用代码。它是“类方法”还是“实例方法”?
  • 类中的方法是这样的: - (void) testM { NSLog(@"in test"); }

标签: objective-c ios cocoa-touch class


【解决方案1】:

当你说“如果我从视图控制器中的另一个函数再次调用它没有任何作用”时,首先要检查的是你发送testMethod 的内容。它可能是 nil,在这种情况下什么都不会发生。在目标 C 中,向 nil 发送消息什么都不做。添加一个 NSLog 来查找,例如

 NSLog(@"imageMover object is: %@", imageOver);
 [imageMover testMethod]; 

如果 NSLog 显示它是 nil - 或者一些疯狂的东西 - 然后跟进你对 imageMover ivar 所做的事情。

您在问题中提到了一个类方法,但不要在您的代码 sn-ps 中引用它。

如果您已将testMethod 定义为类方法,那么如果您将该消息发送到实例,它当然会失败。 (而且它会吵闹地失败。)一个类方法会像这样被引入:

 + (void) testMethod
 {
       NSLog(@"CMImageMover testMethod called on Class");
 }

一个实例方法会这样引入:

 - (void) testMethod
 {
       NSLog(@"testMethod called on an instance of CMImageMover");
 }

如果这一切对您来说非常明显并且错过了问题的重点,我们深表歉意。从你的问题看,问题出在哪里还不是很清楚。

【讨论】:

  • 如果我做 NSLog(@"object is: %@", [imageMover description]);在我调用 testMethod 之前它说它是空的。
  • 啊,我修好了。所以发生的事情是我在 viewDidLoad 中设置了很多东西。我刚刚做了那个类,我只是将 alloc 和 init 卡在 viewDidLoad 的末尾。一开始的其他函数调用是在分配之前调用测试方法。我将 alloc 和 init 移到了 viewDidLoad 的开头,一切都按原样工作。我是一个分散的大脑。我将您标记为已回答,因为我通过 + 类方法学到了一些新东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 2016-12-16
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多