我在这里阅读了建议Constants in Objective-C,但我在接受的答案中发现了两个错误:
在我的constants.m文件中,我收到错误"未知类型"对于NSString
根据@VictorHanHee的建议,我也遇到了错误 作为如何将常量链接到.pch文件的进一步建议:
我所做的就是创建constants.h和constants.m,并在接受的答案中提供常量声明。我还创建了一个.pch文件,但正如我所说,它根本不符合VictorHanHee的描述。
这个较旧的帖子是否过时,或者如果不是我错过了什么?我真的不知道如何继续发生链接器错误。我只想要一个文件constants.h,其中我声明所有常量,并且可以在尽可能多的类中包含此文件,因为我希望使生活更轻松。有人可以告诉我现在该怎么做或指向最近的讨论吗?
此处还有链接器错误(或者我可以复制和粘贴的部分日志,而不是完整的消息)
-[AccountInfoViewController viewDidLoad] in AccountInfoViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如您所见,我正在尝试从viewDidLoad访问常量。我只是想用NSLog打印出来。
以下是我最初使用的.h和.m文件:
·H
extern NSString * const PREFS_MY_CONSTANT;
的.m
NSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";
好的,这里的模板实际上似乎有效:
·H
#ifndef Project_prefs_h
#define Project_prefs_h
#endif
extern NSString * const PREFS_MY_CONSTANT;
的.m
#import <Foundation/Foundation.h>
NSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";
因此,较旧的帖子可能具有误导性,或者当他们说除了常数之外的所有内容时,我误解了它们 - 但如果你真的不想删除所有内容,那么你不应该这样说吗?那里有相当多的文字,更不用说......
答案 0 :(得分:1)
在Xcode的最新版本中,没有自动创建ProjectName-Prefix.pch文件,因此您应该将文件导入到需要的位置,然后尝试使用常量。
最简单的方法:
// Prefs.h
#import <Foundation/Foundation.h>
#define PREFS_MY_CONSTANT @"prefs_my_constant"
更好的方式:
// Prefs.h
extern NSString * const PREFS_MY_CONSTANT;
// Prefs.m
NSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";
在Objective-C中创建常量有几种不同的方法,但最简单的方法是使用#define语句。
首先,创建一个新的头文件。这是我们存储所有常量的地方。将其命名为“Constants.h”之类的原始内容。
这是一个包含几个常量的示例文件:
//
// Constants.h
// App Name
#import <Foundation/Foundation.h>
#define NUM_SECTIONS 7
#define NUM_SECTION_1_ITEMS 2
#define NUM_SECTION_2_ITEMS 14
#define NUM_SECTION_3_ITEMS 5
#define APP_TITLE @"App Name"
#define APP_AUTHOR @"Miscellanea"
要在项目中使用这些常量,您需要在每个实现文件(* .m)中导入头文件,您将在其中引用它们。
#import "Constants.h"
– (void)viewDidLoad
{
self.title = APP_TITLE;
for (int i = 0; i < NUM_SECTIONS; ++ i)
{
// etc.
}
}
答案 1 :(得分:-1)
这是似乎有用的模板。它与旧的答案没有什么不同,除了你不删除除常数之外的所有内容。
·H
#ifndef Project_prefs_h
#define Project_prefs_h
#endif
extern NSString * const PREFS_MY_CONSTANT;
的.m
#import <Foundation/Foundation.h>
NSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";
除此之外,似乎不再可能使用.pch文件自动在所有类中包含常量。