为什么这个班级<没有回应=“”> </not>

时间:2010-11-07 17:21:32

标签: objective-c class

您好 我不知道为什么我在“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];
}

由于

2 个答案:

答案 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的位置。