1

ビューコントローラクラスからObjectiveC'dbhelper'クラスに、またはその逆にメソッドを呼び出しています。ビューコントローラクラスからdbhelperクラスのメソッドを呼び出すとき。このように、View Controllerにボタンのメソッドを作成しました。このメソッド内で、このようなdbhelperクラスを呼び出しています。

- (IBAction) clickme 
{
dbhelper *dbhelp = [[dbhelper alloc] init];
[dbhelp dbhelperclassmethod];
}

正常に動作していますが、dbhelperクラスからview controllerクラスのメソッドを呼び出すと、メソッド呼び出しがこのように機能しません。そこからdbhelperクラスにメソッドを作成し、このようにviewcontrollerクラスメソッドを呼び出しています。

  -(void) disableview
    {
       ViewController *Controller = [[ViewController alloc] init];
        [Controller ViewControllerclassmethod];

  }

したがって、このメソッドはviewcontrollerクラスのメソッドを呼び出さず、上記のコードは元のコードではありませんが、問題が何であるかを答えてくれるように、理解のためにこのコードを記述しています。viewcontrollerを呼び出せない理由を教えてください。 dbhelperクラスのおかげでクラス

4

1 に答える 1

2

ViewControllerクラスでの新しいインスタンスを作成し、期待するインスタンスではなく、その新しいインスタンスにdbhelper送信しているように見えます。のインスタンスで、 の呼び出し元のインスタンスのメソッドを呼び出したいViewControllerclassmethod場合は、メッセージの送信先を指定する必要があります。何かのようなもの:dbhelperViewControllerdbhelperdbhelper

dbhelp.callingViewController = self;

ViewController のインスタンスで。それならdbhelperできる

[self.callingViewController ViewControllerclassmethod];

もちろん、 にはdbhelper.h

@property (strong) ViewController * callingViewController;

上記のメソッドControllerで参照してdisableviewいる は、まったく新しい ViewController であり、呼び出された元のものとは完全に分離されていdbhelperます。

別のヒント: Objective C の命名規則は、実際には非常に便利です。呼び出すクラスは(大文字の「D」) と呼ぶ方が適切であり、ローカル変数dbhelperはと呼ぶ方が適切です。他の人、そしてすぐにあなたも、あなたのコードに従うのがより簡単になるでしょう。同様に、and (クラスメソッドではありません。これはまったく別のものです)。DatabaseHelperControllercontrollerdisableViewviewControllerInstanceMethod

于 2012-12-05T22:19:19.683 に答える