在viewDidLoad中的子类之后,调用[super viewDidLoad],但是方法没有被执行

时间:2012-05-14 11:54:33

标签: iphone objective-c ios c inheritance

我有一个关于子类化的问题。

我从第一个观点开始: 在我的.h文件中:

@interface viewAController : UIViewController 

在我的.m文件中:

-(void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Begin view"); 
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    NSError *error = nil;

if (![udpSocket bindToPort:12345 error:&error]) //check ff of dit werkt!
{
    NSLog(@"F you");
    return;
}

NSLog(@"Derde line"); 
if (![udpSocket beginReceiving:&error])
{
    NSLog(@"Screw you!");
    return;
}   
}

移植和开始接收顺利。 然后当我继承viewAController:

@interface viewBController : viewAController

在我的.m文件中:

-(void)viewDidLoad{
[super viewDidLoad]; 
} 

我期待我的子类[viewBController]将显示所有的NSLog,因为我调用了超级viewDidLoad。

相反,它说:F你! 哦,我明白我只能绑定一次到端口,但我期待一个错误信息,这没有显示。

所以我删除了绑定然后我得到了螺丝你,显然我不能说当我没有绑定到端口时开始接收。如果没有这两种方法,它可以正常工作,它会将所有内容打印出来。

问题: 我应该绑定吗?我实际上只需要监听端口12345,我应该以不同的方式实现它吗?

我应该在没有绑定且没有开始接受的情况下工作吗?我认为我更喜欢绑定,所以我不会听我的所有端口。

当我不绑定时,为什么我不能开始接受?

如何显示错误?因为它没有打印任何错误......

greetz

2 个答案:

答案 0 :(得分:0)

你正在做的是对的。但我只有一个问题要问你是否已将派生的ViewController的对象添加到某个View中。 除非你不添加它,你不会得到你的超类的didLoad被解雇。 通过将派生视图的对象添加到SomeView进行检查。

答案 1 :(得分:0)

你做错了

NSLog("@Hi there!");

你必须使用

NSLog(@"Hi there!"); 

如果这是一个拼写错误(我希望是这样),你必须将你的子类添加到使用添加子视图或推送它的地方。