0

MACROオブジェクトを返す関数を定義していNSDictionaryます。これが私が試したコードです

#define GetDictionary(name,description,imageName) [NSDictionary dictionaryWithObjects:@[name,description,imageName] forKeys:@[ATTRIBUTE_TITLE,ATTRIBUTE_DESCRIPTION,ATTRIBUTE_IMAGE_NAME]]

#define GetDictionary(name,description,imageName) @{ATTRIBUTE_TITLE:name,ATTRIBUTE_DESCRIPTION:description,ATTRIBUTE_IMAGE_NAME:imageName}

しかし、辞書オブジェクトを取得するためにこのメソッドを呼び出そうとするたびに、コンパイラは「型のコレクション要素はvoid *目的の c オブジェクトではありません」というエラーを出します。すぐに助けていただければ幸いです。

4

1 に答える 1

1

まず、可能な限り、この種のマクロは避けてください。彼らはまさにこの種の頭痛を引き起こす傾向があります. などのマクロがさらにあると思いATTRIBUTE_TITLEます。マクロではなく単純な関数を使用することを強くお勧めします。はるかに理解しやすいコードが得られます。このようにマクロを使用する理由はほとんどありません。

私の最初の疑いは、ATTRIBUTE_TITLE(または関連するマクロの 1 つ) が適切なオブジェクトではないということです。ほとんどの場合、次のようなことをしたことがあります。

#define ATTRIBUTE_TITLE "foo"

それよりも

#define ATTRIBUTE_TITLE @"foo"

苦情void*は興味深いですが…とにかく、これを関数に切り替え、ATTRIBUTE_*マクロではなく定数に変更すると、エラーが明らかになる可能性があります。

于 2013-09-04T18:16:19.107 に答える