如何在iphone中从目标c类调用视图控制器类

如何在iphone中从目标c类调用视图控制器类,iphone,objective-c,Iphone,Objective C,我正在将方法从视图控制器类调用到目标c'dbhelper'类,反之亦然。当我从视图控制器类调用dbhelper类的方法时。像这样,我为视图控制器中的按钮创建了一个方法,在这个方法中,我像这样调用dbhelper类 - (IBAction) clickme { dbhelper *dbhelp = [[dbhelper alloc] init]; [dbhelp dbhelperclassmethod]; } -(void) disableview { ViewCon

我正在将方法从视图控制器类调用到目标c'dbhelper'类,反之亦然。当我从视图控制器类调用dbhelper类的方法时。像这样,我为视图控制器中的按钮创建了一个方法,在这个方法中,我像这样调用dbhelper类

- (IBAction) clickme 
{
dbhelper *dbhelp = [[dbhelper alloc] init];
[dbhelp dbhelperclassmethod];
}
  -(void) disableview
    {
       ViewController *Controller = [[ViewController alloc] init];
        [Controller ViewControllerclassmethod];

  }
它工作正常,但当我从dbhelper类调用viewcontroller类的方法时,然后调用的方法就不能像这样工作了,我在dbhelper类中创建了方法,从那里我调用viewcontroller类的方法如下

- (IBAction) clickme 
{
dbhelper *dbhelp = [[dbhelper alloc] init];
[dbhelp dbhelperclassmethod];
}
  -(void) disableview
    {
       ViewController *Controller = [[ViewController alloc] init];
        [Controller ViewControllerclassmethod];

  }

因此该方法不调用viewcontroller类方法,上面的代码不是原始代码,但我编写此代码是为了让您理解,以便您能回答我问题所在。因此,请告诉我为什么我无法从dbhelper类调用viewcontroller类。谢谢

,在我看来,您在
dbhelper
中创建了
viewcontroller
的新实例类,并将
ViewControllerclassmethod
发送到该新实例,而不是您期望的实例。如果希望让
dbhelper
的实例调用
ViewController
实例中调用
dbhelper
的方法,则必须告诉
dbhelper
将消息发送到何处。比如:

dbhelp.callingViewController = self;
在您的ViewController实例中。那么
dbhelper
就可以了

[self.callingViewController ViewControllerclassmethod];
当然,在
dbhelper.h
中,必须有一个

@property (strong) ViewController * callingViewController;
您在上面的
禁用视图
方法中引用的
控制器
是一个全新的ViewController,与名为
dbhelper
的原始控制器完全分离


另一个提示:在objective C中有关命名的约定实际上非常有用。调用
dbhelper
的类最好称为
DatabaseHelper
(大写'D'),局部变量
Controller
最好称为
Controller
。其他人,很快你,会发现遵循你的代码更容易。类似地,
disableView
viewControllerInstanceMethod
(而不是类方法,这是完全不同的事情)。

我要问的第一个问题是控制器是否为零。您可能只是没有正确初始化它。您如何知道没有调用
ViewControllerclassmethod
?您是否尝试在调试器中单步执行它或使用NSLog()打印消息?此外,这些都是实例方法。好吧,至少他们应该考虑你是在向实例而不是类对象发送消息。视图控制器是Objective-C类,所以调用VC和“Objective-C类”没有区别然后从一个类调用到下一个类。不要使用带有大写字母的名称作为变量名或方法名。不要使用带有首字母小写字符的名称作为类名。这应该是“viewControllerInstanceMethod”。我错过了!非常感谢你指出这一点,我编辑了答案。