1

iPhoneアプリで何百万も稼ぐという大きな夢を持って、Objective-Cを学ぼうとしている別のC#/.NETの男:)

わかりました、この質問は私が静的型付き言語に慣れていることに起因していると確信しているため、調整に苦労していますが、ここに私の問題があります。MyObect というクラスがあるとします。

MyObject.h

@interface MyObject : NSObject
{

}

-(void)Foo;

@end

MyObject.m

#import "MyObject.h"
@implementation MyObject

-(void)Foo
{
  //do something fooey
}

@end

今、私はこれらのオブジェクトの NSMutableArray を台無しにしようとしているので、私のメインでは、これらのオブジェクトの配列を次のように埋めます:

NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i = 0; i<10;i++)
{
   MyObject *obj = [[MyObject alloc]init];
   [array addObject:obj];
}

派手なものはありません。しかし今、私は配列の最初のものを取り出して foo メソッドを呼び出そうとしていました。だから、ここで私は混乱しています。私はこれを試しました:

MyObject *obj = [array objectAtIndex:1];
[obj Foo];

これが機能している間、 MyObject may not Respond to message という警告が表示されます。それで、私はそれをキャストさせてください:

MyObject *obj = (MyObject *)[array objectAtIndex:1];
[obj Foo];

それはまた私に警告を与えます。

私の質問は、アイテムをコレクションに保存する方法と、それらを引き出してオブジェクトのタイプを保持する方法に関する基本的な質問だと思います。繰り返しますが、私は .NET のバックグラウンドを持っているので、私の考え方に根本的な欠陥がある可能性があります。誰かが私を正しい方向に向けることができれば、大いに感謝します。

編集:私の元のコードには、実際にキャストにアスタリスクがありました(アスタリスクがないと、コンパイルエラーが発生します)。それでも警告は表示されますが...

4

3 に答える 3

1

別の回答へのコメントで説明するようにアスタリスクを含めることを考えると、これは警告を与えるべきではありません。実際、キャストは不要だと思います。キャストのないバージョンでも警告は表示されません。

メソッドを呼び出そうとしているファイルの先頭で、ヘッダーファイルMyObject.hが#importedされていることを確認してください。@class MyObject表示される警告は、クラスを前方宣言しているが、ヘッダーをで含めていない場合の典型的なものです#import "MyObject.h"

ところで、Objective-Cでは、Javaのように、通常、メソッド名は小文字で始まります。

于 2009-06-30T14:55:19.130 に答える
1

OK、今は完全なモロンのように感じます:(ヘッダーファイルにメソッド宣言を追加するのを忘れました。ヘッダーファイルをインポートしていることを確認する必要があることを両方とも強調し続けたという事実は、私にこれを認識させました。ご協力いただきありがとうございます。

于 2009-06-30T15:13:02.107 に答える
1

キャスティング ラインを次のように変更します。

MyObject *obj = (MyObject *)[array objectAtIndex:1];

欠落*が問題です。

于 2009-06-30T14:49:34.290 に答える