2012-01-06 35 views
3

我需要在两个文件之间共享一个常量值;因此,我决定使用const变量,而不是保留一个神奇的数字。 所以我在appDelegate.m 创建global变量const int viewTag = 100;然后访问它作为extern const int viewTag;但我得到以下链接错误:extern in objective-C;他们的行为与C不同吗?

Undefined symbols for architecture i386: 
"viewTag", referenced from: 
    -[xxxViewController launchxxx] in libxxx_iPad.a(xxxViewController.o) 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status 

但上面的东西是完全式法律在普通的C,C++ ENV。任何人都可以抛出一些光?

更新:将extern const int viewTag;在头部和导入该头的作品,但我真的不想做了一个const int

+1

我猜将其放入.h文件中为您的应用程序代理告诉编译器,以暴露给连接器?无论如何,如果你的变量被称为viewTag,为什么它在应用程序委托中呢?它应该在你的视图控制器中定义(或者,理想情况下,作为IBOutlet并使用xib连接?) – deanWombourne 2012-01-06 12:17:57

+0

hey @deanWombourne,这是因为我想在最上面/理想视图上显示密码屏幕。 'viewTag'帮助我做到这一点。 – 2012-01-06 12:38:37

+0

你可以创建一个UIView子类,它是一个密码屏幕,知道如何呈现itsef而不需要视图标签? – deanWombourne 2012-01-06 12:55:51

回答

2

尝试把:

extern const int viewTag; 
appDelegate.h

,然后导入此标题,您需要访问viewTag

+0

好吧,对不起,我忘了提及上述建议的作品,事实上这是我目前所做的。但我真的不想只为一个'const int'导入'.h'。 – 2012-01-06 12:04:09

+0

当然。你经常会发现它具有extern的全局特性,并且你在许多Apple头文件中发现了extern的东西。 – petert 2012-01-06 12:31:06

2

另一种方法是在.pch文件中使用#define viewTag 100。

但我认为,最好的办法是创建常量h文件,包括您要

+0

不需要 - 可能不应该 - 在.pch文件中。 – 2012-01-06 12:03:08

+0

雅,但使用'.pch'是不好的;好的小项目,但我们有100 MB的源代码,如果你改变'.pch'中的一行,所有的应用程序重新编译;-( – 2012-01-06 12:06:07

+0

我认为最好的方法是用常量创建.h文件,并包括你在哪里想。 – Igor 2012-01-06 12:25:15