Deklarowanie extern NSString powoduje błąd linkera

To niedorzeczne, próbuję stworzyć dźwięk, aby włączyć dźwięki aplikacji. Dostaję

Undefined symbols for architecture i386:
"_kPlaySoundPrefsKey", referenced from:
  -[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Sprawdziłem, czy wszystkie moje pliki są połączone w fazach kompilacji, usunąłem appdelegate .m, gdzie otrzymuję błąd, zanim nawet będę mógł wywołać bool w którymkolwiek z moich kontrolerów widoku i ponownie zaimportowałem go w fazach kompilacji. Sprawdzone Mam odpowiednie prace przygotowawcze. Sprawdziłem nawet poprzednią aplikację, którą zrobiłem z tym samym kodem i kodem, który wydaje się być dokładnie taki sam, bez błędu (zbudowany z poprzednią wersją xcode). Powracając do podstaw Otrzymuję błąd, gdy tylko dodam następujący kod do mojego Delegata aplikacji,

.h

#import <UIKit/UIKit.h>
extern NSString *kPlaySoundPrefsKey;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

.m

#import "AppDelegate.h"
#import <AudioToolbox/AudioToolbox.h> 

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
 {

NSDictionary *defaultDict = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
 forKey:kPlaySoundPrefsKey];

return YES;
}

Jeśli się zmienięextern NSString *kPlaySoundPrefsKey; doNSString *kPlaySoundPrefsKey; buduje się, a następnie ulega awarii ... Nie mam już pomysłów

questionAnswers(4)

yourAnswerToTheQuestion