关于在Objective-C中设置常量的更新建议?

时间:2015-04-20 15:15:43

标签: objective-c

我在这里阅读了建议Constants in Objective-C,但我在接受的答案中发现了两个错误:

  1. 当我实现使用.m和.h
  2. 的方法时,我一直收到链接器错误
  3. 在我的constants.m文件中,我收到错误"未知类型"对于NSString

    根据@VictorHanHee的建议,我也遇到了错误 作为如何将常量链接到.pch文件的进一步建议:

  4. 我默认没有.pch文件,当我创建一个新文件时 没有答案中预期的格式。
  5. 我所做的就是创建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";
    

    因此,较旧的帖子可能具有误导性,或者当他们说除了常数之外的所有内容时,我误解了它们 - 但如果你真的不想删除所有内容,那么你不应该这样说吗?那里有相当多的文字,更不用说......

2 个答案:

答案 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文件自动在所有类中包含常量。