0

「引数を渡しています...個別のObjective-Cタイプの警告から」を解読するのに苦労しています。

次のように宣言された定数文字列があります。

extern NSString * const URL_1;

次のように定義されます。

NSString * const URL_1 = @"http://someurl";

たとえば、次のようにその定数を NSString に割り当てます。

NSString *URL = nil;
...
URL = [[NSString alloc] initWithString:URL_1];

そして、この NSString を引数として、NSString を期待する関数に渡します。

ViewController *viewController = [[ViewController alloc] initWithURL:URL];

関数シグネチャ:

- (id)initWithURL:(NSString *)URL

「'initWithURL' の引数 1 を渡しています: 個別の Objective-C タイプから」という警告が表示されます

私が理解しているように、NSStringオブジェクトは一度作成されると不変であり、作成時に文字列に値を割り当てているため、URL_1の一定の性質が問題を引き起こす理由がわかりません。

私はここでドーナツをしていて、単純なことを見落としていると確信しています! 誰かがこの警告を解決するのを手伝ってくれませんか? よろしくお願いします!

4

1 に答える 1

2

システム フレームワークには、次のように宣言されている多くのメソッドがあります。

- (id)initWithURL:(NSURL *)anURL;

そしてもちろん、次の+allocように宣言されています。

- (id) alloc;

したがって、コンパイラが見たとき:

ViewController *viewController = [[ViewController alloc] initWithURL:URL];

割り当ての戻り値の型は でidあり、コンパイラは上記の宣言を参照している可能性があり、それが警告の原因です。通常、コンパイラは、セレクターに複数のシグネチャー (特定のメソッド名に複数のシグネチャー) が見つかったことを警告します。

ViewController.hそうでない場合は、上記のコード行を含むファイルにインポートしていない可能性があります。

つまり、異なる型の引数を取る別のメソッドと同じ名前のメソッドを宣言しないでください。

于 2010-01-17T20:22:54.117 に答える