在Xcode中编译/加载期间未定义的符号

时间:2013-04-28 15:09:54

标签: ios xcode subclass

我正在做一个故事板教程(从iOS故事板开始),其中一个示例程序将无法编译。我之前遇到过这个问题,编译器无法识别对象类,但我找不到问题。

我错过了什么?

错误: 架构i386的未定义符号:   “_OBJC_CLASS _ $ _ AudioPlayer”,引自:       MainViewController.o中的objc-class-ref

MainViewController.m
--------------------
#import "MainViewController.h"

@interface MainViewController ()
{

}
@end

@implementation MainViewController

@end

MainViewController.h
--------------------

#import "FlipsideViewController.h"

#import "AudioPlayer.h"
#import "PlayButton.h"
#import "Scale.h"

@interface MainViewController : UIViewController
<FlipsideViewControllerDelegate,
AudioPlayerDelegate,
PlayButtonDelegate,
UIPopoverControllerDelegate>

@end

AudioPlayer.m
-------------
#import "AudioPlayer.h"
@interface AudioPlayer () {

}

...(snip)...

@end

@implementation AudioPlayer

...(snip)...
@end

AudioPlayer.h
-------------

#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>

...(snip)...

@protocol AudioPlayerDelegate;

@interface AudioPlayer : NSObject <AVAudioPlayerDelegate> {

}

...(snip)...

@end

@protocol AudioPlayerDelegate <NSObject>
@required
-(void)player:(AudioPlayer *)player stateChanged:(ePlayerState)state;
@end

2 个答案:

答案 0 :(得分:0)

缺少的符号是因为当你使用的框架不是自动添加到项目中的框架之一时,你需要告诉编译器将它们添加到它要查看的地方列表中。

要执行此操作,请打开左侧面板(苹果1),然后选择项目的活动目标。你正在寻找类似构建步骤的东西,而第四个将是链接框架。打开它并搜索您缺少的框架。通常,它与include的第一部分具有相同的名称,因此它可能是AudioToolbox.framework。

答案 1 :(得分:0)

穆拉特的评论解决了这个问题。但是在Xcode中,当你复制它们时不会自动添加要编译的.m文件,而不是修改它们。

可能没有为您的目标编译AudioPlayer.m。在导航器上选择文件,并确保在文件检查器的“目标成员身份”部分中选择了目标。 - murat 4月28日15:25