我开始学习Xcode(Objective c)和im orginal c#/ vb程序员 面对以下问题,我无法找到合适的答案
当我创建像
这样的.h文件时#import <UIKit/UIKit.h>
@interface Core : NSObject
@property BOOL *DebugMode;
@end
@implementation Core
-(void)SetDebugMode:(BOOL*)Debug
{
self.DebugMode = Debug;
}
@end
如果我想在另外2个.h文件中使用该类(如UIViewController) 我通过
访问它Core *cr = [[Core alloc]init];
它出现以下错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_Core", referenced from:
objc-class-ref 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)
我也尝试在AppDelegate.m中使用它们 什么是目标c中的类和方法的正确使用 非常感谢你的提示和帮助。
我希望在.h UIViewcontroller代码或其他地方使用一个类 所以我可以使用像DebugMode等常规的东西。不知道如何在xcode中做到这一点
亲切的问候, 斯蒂芬。
答案 0 :(得分:0)
您需要在界面上方#import您要使用它的文件顶部的头文件:
#împort "Core.h"
您的.h文件仅 公共API,它们不应包含实现。这就是你的.m文件的用途。换句话说,您的.h文件应如下所示:
#import <UIKit/UIKit.h>
@interface Core : NSObject
@property (nonatomic) BOOL DebugMode;
@end
并且您的.m文件(实现)应如下所示:
#import "Core.h"
@interface Core()
// Any private properties you want
@end
@implementation Core
-(void)setDebugMode:(BOOL)DebugMode
{
_DebugMode = DebugMode;
}
@end
然后,当您准备好设置DebugMode时,在您要访问它的文件的顶部添加#import "Core.h"
,并将其设置为:
Core *co = [[Core alloc] init];
co.DebugMode = foo; // NOTE: You can access this @property (DebugMode) from a different class because it is in your public .h file.
注意:请勿在BOOL中使用星号:
-(void)SetDebugMode:(BOOL*)DebugMode // This is wrong.
-(void)setDebugMode:(BOOL)DebugMode // This is correct.
您还应该使用小写字母启动属性。
答案 1 :(得分:0)
你应该写
-(void)SetDebugMode:(BOOL*)Debug
{
self.DebugMode = Debug;
}
在.m文件中,并使你的.h文件看起来像这样
#import <UIKit/UIKit.h>
@interface Core : NSObject
@property BOOL *DebugMode;
@end
@implementation Core
-(void)SetDebugMode:(BOOL*)Debug; //only name
@end
之后你就可以像你一样打电话了
Core *cr = [[Core alloc]init];
[cr SetDebugMode:foo];