首页 文章

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

提问于
浏览
0

我有两节课 .

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 _ $ _ APPagineDescription”,引自:appagine.o中的objc-class-ref“OBJC_CLASS _ $ _ APPagineMedia”,引自:APViewController中的objc-class-ref . 在APPagine中的objc-class-ref .o“ OBJC_CLASS _ $ _ APPagineSommario”,引自:appagine.o中的objc-class-ref ld:未找到架构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我的问题是: what is correct way to import the classes in my controller?
应该使用 #import@class ?以该顺序?
需要 @class#import 的类是什么?

注意

Build -> Compile Sources 中,两个文件都已正确配置 .
如果我删除 _XmlData.Pagine = [[APPagine alloc] init]; 应用程序运行良好

谢谢 .

3 回答

  • 0

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

    • 您有相应的 @implementation 例如APPagine.m

    • 该APPagine.m包含在项目中,并在XCode中为您的目标激活

  • 0

    问题是你的viewController刚才

    #import "APXmlData.h"
    

    因为你在viewController中使用了 _XmlData.Pagine = [[APPagine alloc] init];

    您还应该使用在viewController中导入 APPagine

    #import "APPagine.h"
    
  • 2

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

相关问题