First Controller的代码:
optionscontroller = [[OptionsViewController alloc] init ];
[optionscontroller setupSocket];
第二个控制器的代码:
- (void)setupSocket
{
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![udpSocket bindToPort:0 error:&error])
{
// [self logError:FORMAT(@"Error binding: %@", error)];
return;
}
if (![udpSocket beginReceiving:&error])
{
// [self logError:FORMAT(@"Error receiving: %@", error)];
return;
}
isRunning = YES;
NSLog(@"Udp Echo server started on port %hu", [udpSocket localPort]); }
其中一项行动:
- (IBAction)testbutton:(id)sender {
NSString *host = @"192.168.1.255";
if ([host length] == 0)
{
NSLog(@"Address required");
return;
}
NSString *msg = @"hi";
if ([msg length] == 0)
{
//[self logError:@"Message required"];
return;
}
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket enableBroadcast:YES error:nil ];
[udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:0];
tag++;
}
当我从第一个控制器调用“setupSocket”时它会启动,但是当我转到OptionsViewController并单击按钮时 - 没有任何反应,它是正确的,当我从第二个控制器的“视图确实加载函数”调用“setupSocket”时它正常工作“一切正常,为什么???
因此,如果不是从目标视图控制器初始化某些方法,则此方法不起作用。我无法理解它会如何发生?
答案 0 :(得分:0)
如果您在界面构建器中使用XIB,则需要确保将按钮连接到其动作。通过在界面生成器中右键单击并从按钮拖动到文件所有者来执行此操作。
哦,还需要optionscontroller = [[OptionsViewController alloc] initWithNibName:@“YOURNIBNAMEHERE”];
如果您是以编程方式创建它(如果您使用的是IBAction,则不应该这样),那么您可以使用它:
addTarget:动作:forControlEvents:
请阅读: