2012-02-24 7 views
3

私は定義があります。Objective-Cでは、main()関数で 'self'を使う方法は?

@interface MyClass: NSObject 
{ 
    NSString *str; 
    id delegate; 
} 
-(id)initWithStr:(NSString *)str 
     delegate:(id)delegate; 
@end 

をし、私はこのようなmain.mで私のオブジェクトにメッセージを送信する場合:

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 
     [[MyClass alloc] initWithStr:@"abc-xyz" 
          delegate:self]; 
    } 
} 

宣言されていない識別子 『自己』のエラー」の使用があります"。私はobjective-cのnewbですが、私は 'self'がメッセージの受信者を示していることを知っていますが、main()関数でどのように使用するのか分かりません。誰がそれについて何が間違っているのか、それを修正する方法を教えてもらえますか?

答えて

4

何が起こるかは、自己が実行オブジェクトを指していることです。 main関数はクラスにないので、クラスのメソッドに対してのみ、関数上で自己を呼び出すことはできません。あなたは本当に何をしようとしていますか? AppDelegateを使用します。新しいプロジェクトを作成すると、Xcodeはすでにいくつかのファイルを提供しています。そのうちの1つは(YOUR_PROJECT)AppDelegateと呼ばれます。これがアプリケーションの出発点です。アプリの初期化で行うすべてのカスタマイズを持っている場合は

は、- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法を探して、あなたのAppDelegate.mファイルを見つけ、このメソッド内にコードを配置します。

main.mファイルで決して駄目です。

EDIT:MacのOS Xの場合

はここにあなたが何をすべきかです:

は代理人として行動し、デリゲートにそのクラスを追加するクラスを作成します。

MyDelegate * d; 
MyClass * c; 

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 

     d = [[MyDelegate alloc] init]; 

     c = [[MyClass alloc] initWithStr:@"abc-xyz" 
          delegate:d]; 
    } 
} 

次に、MyDelegateでプロトコルのコールバックを実装します。

メインでコールバックを使用する場合は、関数ポインタを使用する必要があります。あなたはCの世界に入る必要があります。オブジェクト指向のものを使いたいので、私はお勧めしません。両方を混ぜたり、モンスターを作りません。

+0

ありがとうございました!しかし、私は 'コマンドラインツール'またはデーモンアプリケーションを作成したいと思います。このような場合、プロジェクト内に「(YOUR_PROJECT)AppDelegate」が全くありません。どうすればいいですか? –

+0

iphone用のコマンドラインツールなどはできません。刑務所が壊れていない限り。いずれにしても、App Delegateは主な機能ではなく、その開始点です。主な関数は次のようなものでなければなりません:return UIApplicationMain(argc、argv、nil、NSStringFromClass([AppDelegate class])) –

+0

ありがとうございました!ところで、Mac OS Xについてはどうですか? –

0

このようなmain()関数は使用しません。
これをAppDelegateで行います。それだけで動作します。

+0

私はそれについて知らない。いくつかのサンプルコードを提供できますか?どうもありがとうございました。 –

+0

Xcodeで新しいプロジェクトを開始するだけです。既にAppDelegateがあなたのために設定されています! – Mundi

+0

しかし、私は "コマンドラインツール"やデーモンツールを作りたいと思っています。 –

-1

Objective-Cでは、main()関数で 'self'を使用する方法は?

これは不可能です。

"self"はオブジェクトのインスタンスでしか使用できないためです。 main()は関数です。関数はオブジェクトではなく、 "それ自身で"コードします。