您好 我不知道为什么我在“msg”课程中调用一个函数 它没有回应:(
这是“msg”类:
msg.h:
#import <UIKit/UIKit.h>
@interface msg : NSObject {
}
-(void) Print;
@end
msg.m:
#import "msg.h"
@implementation msg
-(void) Print {
NSLog(@"Hello World");
}
@end
viewController.h:
#import <UIKit/UIKit.h>
#import "msg.h"
@class msg;
@interface ClassMod4ViewController : UIViewController {
msg *object;
}
@property (nonatomic,retain) msg *object;
@end
viewController.m:
#import "ClassMod4ViewController.h"
@implementation ClassMod4ViewController
@synthesize object;
- (void)viewDidLoad {
[object Print];
[super viewDidLoad];
}
由于
答案 0 :(得分:1)
在调用viewDidLoad之前,对象是否已在指定的初始值设定项中初始化(对于UIViewController子类通常为initWithNibName:bundle:
?
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
// ...
object = [[Msg alloc] init];
// ...
return self;
}
如果对象尚未初始化,则为零。请记住,在Objective-C中发送nil对象消息是可以的(结果不会发生任何事情)。
答案 1 :(得分:0)
你试过了吗?
- (void)viewDidLoad {
assert(object);
[object Print];
[super viewDidLoad];
}
如果断言失败,则指向object
的指针为0(或nil
)。您必须在使用它之前创建该对象。这是通常在初始化程序中执行(在您的情况下,包含object
实例的类):
- (id)init {
self = [super init];
if (0 != self) {
object = [[msg alloc] init];
}
return self;
}
但有时您会想稍后创建该对象。
如果要初始化它,则可能需要设置访问对象的断点,以确定将对象设置为0的位置。