0

最初のコントローラーのコード:

 optionscontroller =  [[OptionsViewController alloc] init ];

 [optionscontroller setupSocket];

2 番目のコントローラーのコード:

- (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]); }

アクションの 1 つ:

- (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 に移動してボタンをクリックすると、何も起こりません。2 番目のコントローラーの「view did load function」から「setupSocket」を呼び出すと、すべてが機能します。いいよ、なんで???

そのため、ターゲット ビュー コントローラー以外からいくつかのメソッドを初期化すると、このメソッドは機能しません。私はそれがどのように起こるのか理解できませんか?

4

1 に答える 1

0

Interface Builder で XIB を使用している場合は、ボタンをそのアクションに接続していることを確認する必要があります。これを行うには、ボタンを右クリックして Interface Builder のファイルの所有者にドラッグします。

また、 optionscontroller = [[OptionsViewController alloc] initWithNibName:@"YOURNIBNAMEHERE"]; が必要です。

プログラムで作成する場合 (IBAction を使用している場合はそうすべきではありません)、これを使用します。

addTarget:action:forControlEvents:

ここを読む:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIControl_Class/Reference/Reference.html

于 2012-04-12T18:04:47.567 に答える