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(或一个相关的宏)不是一个合适的对象。您很可能已经做过类似的事情:

#define ATTRIBUTE_TITLE "foo"

而不是

#define ATTRIBUTE_TITLE @"foo"

尽管void*抱怨很有趣……无论如何,将其切换为函数,并更改ATTRIBUTE_*为常量而不是宏,可能会使错误变得明显。

于 2013-09-04T18:16:19.107 回答