JSA*_*986 15 xcode boolean objective-c ios
这是荒谬的,我试图创建一个声音bool来转换应用程序的声音.我一直在
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)
Run Code Online (Sandbox Code Playgroud)
我已经检查过我的所有文件都是在构建阶段链接的,我已经删除了appdelegate .m,在我得到错误之前,我甚至可以在任何视图控制器中调用bool,并在构建阶段重新导入它.检查我有相关的framweworks到位.我甚至检查了我使用相同代码制作的以前的应用程序,它看起来完全相同,没有错误(使用以前版本的xcode构建).回到基础,我将以下代码添加到App Delegate后立即收到错误,
.H
#import <UIKit/UIKit.h>
extern NSString *kPlaySoundPrefsKey;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
Run Code Online (Sandbox Code Playgroud)
.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;
}
Run Code Online (Sandbox Code Playgroud)
如果我改变extern NSString *kPlaySoundPrefsKey;到 NSString *kPlaySoundPrefsKey;它建立然后崩溃...林的想法,现在
idz*_*idz 18
当你extern在告诉编译器的时候声明某些东西时,你会在其他地方定义它.在您的情况下,您永远不会定义您的变量
所以在你的.h你会有:
extern NSString* kPlaySoundPrefsKey;
Run Code Online (Sandbox Code Playgroud)
但是在某些.m你也必须拥有
NSString* kPlaySoundPrefsKey = @"play_sounds"; // or some value
Run Code Online (Sandbox Code Playgroud)
因为在您的情况下这些是常量,您还可以指定:
extern NSString* const kPlaySoundPrefsKey;
Run Code Online (Sandbox Code Playgroud)
和
NSString* const kPlaySoundPrefsKey = @"play_sounds";
Run Code Online (Sandbox Code Playgroud)
如果有人写了类似的东西,添加const限定符将导致编译器错误
kPlaySoundPrefsKey = @"some_other_value";
Run Code Online (Sandbox Code Playgroud)
即使我正确声明并定义了extern const字符串,我也得到了同样的错误.问题是,我的常量文件不在编译源列表中.
确保您的.m文件出现在构建目标的"编译源"构建阶段中.有时,在Xcode中向项目添加文件不会将所有实现文件添加到适当的目标.
希望这对一些人有帮助.Refe:链接器错误未定义符号符号未找到
谢谢你们的帮助
我添加了
NSString *kPlaySoundPrefsKey = @"playSoundKey";
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultDict];
到应用程序委托。这解决了它
| 归档时间: |
|
| 查看次数: |
10883 次 |
| 最近记录: |