iOS: Best way to have a global string - as for a notification name
我一直在阅读与此有关的不同内容,这似乎很令人困惑。 有人可以告诉我正确的模式来定义可全局使用的通知字符串吗? 我尝试过的所有操作都导致了链接器错误。 例如,在我的GlobalVariables单例中,我添加了:
1 2 3 4 | #import <Foundation/Foundation.h> extern NSString *kMPTimeChanged; @interface GlobalVariables : NSObject etc. |
然后在init中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @implementation GlobalVariables #pragma mark Singleton Methods + (id)sharedGlobals { static GlobalVariables *sharedGlobals = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedGlobals = [[self alloc] init]; }); return sharedGlobals; } - (id)init { if (self = [super init]) { kMPTimeChanged=@"kMPTimeChanged"; return self; } |
它没有建立,我遇到了多个错误。
在您的.h文件中,您应该输入:
1 | extern NSString * const kMPTimeChanged; |
在您的.m文件中,您应该输入:
1 | NSString * const kMPTimeChanged = @"My Constant"; |
这些都应该在
我建议将变量声明为const extern。然后:
1 2 3 4 5 | // Globals.h extern NSString * const kMPTimeChanged; // Globals.m NSString * const kMPTimeChanged = @"..."; |
我不喜欢
我的解决方案是简单的
在您的project-Prefix.pch文件中导入。这将自动添加到您的所有代码中,您将可以使用常量,并且无需考虑常量就可以知道它们的来源。
这是我的project-Prefix.pch文件的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 | #import <Availability.h> #ifndef __IPHONE_5_0 #warning"This project uses features only available in iOS SDK 5.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> #import"Constants.h" #endif |
现在,您可以在任何地方访问
如果您的值是常量,则仅使用标头,例如称为
1 | #define kMPTimeChanged @"kMPTimeChanged" |