1

呼び出しクラスで前方宣言を使用しています。

ClassTwo の.h ファイル

@class ClassOne

@property(nonatomic,retain) ClassOne *class_One;

.m ファイル

@synthesize class_One;

次に、ClassOneでこのメソッドを呼び出そうとしています

[self.class_One callingThisMethodFromClassTwo];

一方、ClassOneで共有インスタンスを作成し、それをクラスメソッドとして使用すると機能します

[[ClassOne Shared] nowItWorks];

これが愚かな質問である場合は申し訳ありませんが、私は非常に新しいです

4

3 に答える 3

1

class_One インスタンスを割り当て#import "ClassOne.h"て、ヘッダーに追加してみてください classtwo.m

self.class_One= [[ClassOne alloc]init]; 
[self.class_One callingThisMethodFromClassTwo];
于 2013-01-23T19:05:23.653 に答える
0

失敗した場合[self.class_One callingThisMethodFromClassTwo];...これはそれを直接参照します

  1. どちらの class_One も alloc+init-ed ではありません。

  2. またはcallingThisMethodFromClassTwo、プライベート/保護されたメソッドです。

  3. またはcallingThisMethodFromClassTwoクラスメソッドです。

于 2013-01-23T19:07:38.503 に答える
0

Protocol/Delegateこの問題に使用することをお勧めします。

クラスのデリゲート プロトコルを宣言する必要があります。クラス Foo のデリゲート プロトコルとインターフェイスの例は、次のようになります。

@プロトコル MyClassDelegate

// Required は、デリゲートを使用したい場合に // 実装する必要があることを意味します。@required // 別のクラスから呼び出したいメソッド。- (void)タスク完了:(BOOL)完了; @終わり

@interface MyClass : NSObject { // コンパイル時にどのような種類のクラスが採用されるかわからないため、これは id id デリゲートです。}

@property (nonatomic, assign) id デリゲート;

  • (無効) タスク完了;
  • (void)doSomeTask;

複雑なプロジェクトがあり、クラス間に多くのリンケージを作成したくないとします。その場合、このような委譲が最適な実装方法になります。関数ポインターとコールバックを使用するようなものですが、通信は双方向で簡単に行われます。私たちのプロトコルを採用し、実際にクラスで使用する時が来ました。

myClass = [[MyClass alloc] init];
// Very important. If we don't let myClass know who the delegate
// is we'll never get the protocol methods called to us.
[myClass setDelegate:self];

これで、別のクラスからメソッドを呼び出すことができます。これがお役に立てば幸いです。

于 2013-01-23T19:35:24.953 に答える