3

次の警告が表示されます:「NSURLからNSStringを割り当てる互換性のないポインタタイプ」。

問題のコードは次のとおりです。

cell.articleURL.text = [self.articles[row] URL];

ArticleオブジェクトのURLプロパティの値をラベルに割り当てています。self.articles配列は、Articleオブジェクトを保持するためにのみ使用されます。

Articleクラスではこれがあります:

@property (nonatomic, strong) NSString *URL;

なぜNSURLだと思っているのですか?

4

6 に答える 6

5

問題はself.articles[row]、タイプがオブジェクトを返すことですid。これは、Objective-Cランタイムがどのメソッド実装が適用されるかを判断できないことを意味します。URL別のインターフェースでメソッドを見つけて、それを使用しています。

この問題についての詳細は、 MattGallagherによるObjective-Cの弱いタイピングの大きな弱点の記事にあります。

于 2013-03-19T17:54:05.210 に答える
0

混乱を避けるために、コードをリファクタリングします。

Article *article = self.articles[0];
cell.articleURL.text = article.URL;

URLジムが述べたように、コンパイラはオブジェクトに対して間違ったメソッドを見つけていidます。コードを分割することで、この問題を回避できます。

于 2013-03-19T17:58:11.593 に答える
0

コードは配列の戻り型を認識していないため、どのクラスからどのメソッドを呼び出しているかを推測します。このようなキャストを追加する必要があります。これにより、コンパイラはどのクラスを期待するかを正確に知ることができます。

cell.articleURL.text = [(Article *) self.articles[row] URL];
于 2013-03-19T17:58:54.340 に答える
0
cell.articleURL.text = [self.articles[row] URL];

あなたが言ったように、をself.articles[row]返すidので、あなたはそのタイプを強制する必要がありますArticle

cell.articleURL.text = [(Article *)self.articles[row] URL];

によって返されるオブジェクトによって呼び出されるURLというメソッドがself.articles[row]あり、その戻りタイプはNSURL

と呼ばれるメソッドを持つクラスが見つからないため、URLこれは使用しているフレームワークまたはクラス/ライブラリのいずれかに存在する必要があり、呼び出されます。

于 2013-03-19T17:56:29.637 に答える
0

@Jimの回答に追加します。の結果を、が宣言さ[self.articles[row]]れている正しいクラスにキャストする必要があります。@property (nonatomic, strong) NSString *URL;したがって、Objective-Cランタイムは、どのメソッド実装を適用できるかを判断できます。

すなわち

[(Article *)[self.articles[row]] URL]

または、これをタイプの変数に格納してから、ArticleそのオブジェクトのURLを呼び出します。

于 2013-03-19T17:59:54.150 に答える
0

その時点でコンパイラを作成するときNSMutableArray、どのタイプのオブジェクトを格納するかはわかりません。動的に決定されます。URLしたがって、コンパイラから 取得しようとすると[self.articles[row] URL];、それはidタイプとして扱われます。したがって、型キャストを使用する必要がありますcell.articleURL.text = [(Article *) self.articles[row] URL];

于 2013-06-04T17:31:58.150 に答える