2012-04-12 5 views
0

ersten Controller Code:Zugriff auf Methoden aus anderen Controller Probleme iOS

optionscontroller = [[OptionsViewController alloc] init ]; 

[optionscontroller setupSocket]; 

zweiten Controller Code:

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

Einer von Aktionen:

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

}

Wenn i rufe "setupSocket" von f auf ersten Controller es startet, aber wenn ich zu OptionsViewController gehen und klicken Sie auf die Schaltfläche - nichts passiert, es ist richtig konnotiert und es funktioniert, wenn ich "SetupSocket" aus dem zweiten Controller "View Did Load-Funktion" alles funktioniert in Ordnung, warum ???

Also, wenn einige Methoden nicht vom Zielansicht-Controller initialisieren, funktioniert diese Methode nicht. Ich kann nicht verstehen, wie es passieren kann.

+0

Wie gehst du zum 'OptionsViewController'? Ich bin mir ziemlich sicher, dass Sie eine andere Instanz verwenden als die, die Sie in '[optionscontroller setupSocket];' verwendet haben. Was meinst du mit "Aktionsmethode funktioniert nicht"? kannst du genauer sein? – sch

+0

Ich tippe einfach auf ein Tab-Bar-Symbol –

Antwort

0

Wenn Sie eine XIB mit Interface Builder verwenden, müssen Sie sicherstellen, dass Sie die Schaltfläche mit ihrer Aktion verbinden. Klicken Sie dazu mit der rechten Maustaste auf die Schaltfläche und ziehen Sie sie im Interface Builder auf den Eigentümer Ihrer Datei.

Oh, Sie müssen auch optionscontroller = [[OptionsViewController Alloc] initWithNibName: @ "YOURNIBNAMEHERE"];

Wenn Sie es programmatisch erstellen (was, wenn Sie IBAction verwenden Sie nicht sein sollte), dann würden Sie verwenden:

addTarget: Aktion: forControlEvents:

hier lesen:

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

+0

Wenn Sie eine XIB-Datei verwenden, müssen Sie sie irgendwann laden. IBAction gibt an, dass Sie wahrscheinlich den Interface Builder und eine XIB-Datei verwenden. –