2012-04-12 160 views
0

第一個控制器的代碼:從其他控制器問題訪問方法的iOS

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++; 

}

當我從f調用「setupSocket」它啓動,但當我去OptionsViewController並點擊按鈕 - 什麼都沒有發生,它是內涵正確,它的工作原理,當我從第二個控制器的「視圖加載函數」調用「setupSocket」一切正常,爲什麼?

因此,如果不是從目標視圖控制器初始化某些方法,則此方法不起作用。我無法理解它會如何發生?

+0

你如何去'OptionsViewController'?我非常確定你使用了一個不同於你在'[optionscontroller setupSocket];'中使用的實例。另外,你的意思是「行動方法不起作用」?你可以說得更詳細點嗎? – sch 2012-04-12 18:03:35

+0

我只需點擊一個標籤欄圖標 – 2012-04-12 18:47:01

回答

0

如果您將XIB與界面構建器配合使用,則需要確保將按鈕連接至其操作。通過在Interface Builder中右鍵單擊並從按鈕拖到文件的所有者來完成此操作。你還需要optionscontroller = [[OptionsViewController alloc] initWithNibName:@「YOURNIBNAMEHERE」];

如果以編程方式創建它(這如果你使用IBAction爲你不應該),那麼你這樣做:

addTarget:動作:forControlEvents:

這裏閱讀:

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

+0

如果您使用的是XIB文件,您必須在某個時間點加載它。 IBAction表明你可能使用Interface Builder和XIB文件。 – 2012-04-12 18:41:53