4

私はこれについてさまざまなことを読み続けていますが、危険なほど混乱しているようです. グローバルに使用できる通知文字列を定義する適切なパターンを教えてください。私が試したすべてがリンカーエラーを引き起こしました。たとえば、GlobalVariables シングルトンに次を追加しました。

#import <Foundation/Foundation.h>
extern NSString *kMPTimeChanged;

@interface GlobalVariables : NSObject etc. 

そして、初期化で:

@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;
}

ビルドされませんでした。複数のエラーが発生しました。

4

4 に答える 4

17

.h ファイルに次のように記述します。

extern NSString * const kMPTimeChanged;

.m ファイルに次のように記述します。

NSString * const kMPTimeChanged = @"My Constant";

これらはどちらも@interfaceand@implementationブロックの外側にある必要があります。

于 2013-11-01T15:47:24.337 に答える
0

extern私は変数が好きではありません。それらがどこから来たのかを理解するのが難しい場合があり、どこからともなく存在しているように見える不適切な名前の変数を大規模なコードベースで検索する必要があります。私は一種のグローバル変数にいると思いますが、それは悪の群集です。それでも、それらは便利なので、独自の解決策があります。

Constants私の解決策は、必要なものは何でも(もちろんすべて読み取り専用)、一連の静的メソッド、プロパティを備えた単純なクラスです。問題は、このクラスをどこにでもインポートするのに行き詰まっていることです! しかし、それには簡単な解決策があります。

プロジェクトのインポートで-Prefix.pch ファイル。これはすべてのコードに自動的に追加され、定数を使用することができ、それについて考える必要なく、定数がどこから来ているかを知ることができます。

これが私のプロジェクトの例です-Prefix.pchファイル

#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

どこからでもアクセスでき、どこから来たのConstants.serverUrlかを正確に知ることができます。serverUrl

于 2013-11-01T19:08:05.013 に答える