#import和@class的问题导致_OBJC_CLASS_从错误中引用

时间:2012-10-20 14:48:59

标签: iphone objective-c ios class interface

我有两节课。

APPagine.h

#import <Foundation/Foundation.h>
@interface APPagineMedia : NSObject
@property (nonatomic, retain) NSString *Immagine;
@property (nonatomic, retain) NSString *Video;
@end

@interface APPagineDescription : NSObject
@property (nonatomic, retain) NSString *Descrizione;
@end

@interface APPagineSommarioLinee : NSObject
@property (nonatomic, retain) NSString *Description;
@property (nonatomic, assign) int IdLinea;
@end

@interface APPagineSommarioCategorie : NSObject
@property (nonatomic, retain) NSString *Nome;
@property (nonatomic, assign) int DestId;
@property (nonatomic, retain) APPagineSommarioLinee *Linee;
@end

@interface APPagineSommario : NSObject
@property (nonatomic, retain) APPagineSommarioCategorie *Categorie;
@end

@interface APPagine : NSObject
@property (nonatomic, assign) NSString *Layout;
@property (nonatomic, assign) int Indice;
@property (nonatomic, retain) NSString *Titolo;
@property (nonatomic, retain) APPagineMedia *Media;
@property (nonatomic, retain) APPagineDescription *Descrizione;
@property (nonatomic, retain) APPagineSommario *Sommario;
@end

APXmlData.h

@interface APXmlData : NSObject

@property (nonatomic, retain) NSString *Lingua;
@property (nonatomic, assign) float Versione;
@property (nonatomic, assign) long long Timestamp;
@property (nonatomic, retain) APPagine    *Pagine;
@property (nonatomic, retain) APCategorie *Categorie;
@property (nonatomic, retain) APCarousel  *Carousel;

@end

最后在我的控制器界面中:

#import "APXmlData.h"
@interface APViewController : UIViewController
{
  APXmlData *_XmlData;
}
@end

并在实施中:

_XmlData.Timestamp = 123;
_XmlData.Version = 1.0;
_XmlData.Pagine = [[APPagine alloc] init];
_XmlData.Pagine.Layout = @"a";
_XmlData.Pagine.Indice = 1;
_XmlData.Pagine.Titolo = @"titolo";
//[...]

但是,
当我去设置数据

_XmlData.Pagine = [[APPagine alloc] init];

他给我一个链接器错误,经典

  

架构i386的未定义符号:
  “_OBJC_CLASS _ $ _ AP​​PagineDescription”,引自:         APPagine.o中的objc-class-ref

     

“_ OBJC_CLASS _ $ _ AP​​PagineMedia”,引自:         APViewController.o中的objc-class-ref         APPagine.o中的objc-class-ref

     

“_ OBJC_CLASS _ $ _ AP​​PagineSommario”,引自:         APPagine.o中的objc-class-ref

     

ld:找不到架构i386 clang的符号:错误:链接器命令失败,退出代码为1   (使用-v查看调用)

我的问题是: import控制器中的课程的正确方法是什么?
应该使用#import还是@class? 按顺序?
需要@class#import的课程有哪些?

构建 - &gt;编译源,两个文件都已正确配置 如果我删除_XmlData.Pagine = [[APPagine alloc] init];应用运行良好

感谢。

3 个答案:

答案 0 :(得分:2)

您收到的错误是链接器错误,而不是编译器错误,因此看起来#import已正确完成。当程序链接器找不到实现时,会发生链接器错误。我建议你查一下:

  • 您有相应的@implementation例如APPagine.m
  • APPagine.m包含在项目中,并且在XCode中为您的目标激活

答案 1 :(得分:0)

问题是你的viewController只是

#import "APXmlData.h"

在viewController中使用_XmlData.Pagine = [[APPagine alloc] init];

您还应该使用

在viewController中导入APPagine
#import "APPagine.h"

答案 2 :(得分:0)

您遇到链接器错误这一事实意味着问题与您的#import@class声明无关。问题是您的项目缺少此类的.m文件(如果库包含您自己应该编译的源)或库(.a或.dylib或.framework,如果库已经存在)为你编译)。检查目标设置中的“构建阶段”,以确保项目中包含必要的文件。