2012-03-30 3 views
3

Ich bin ein bisschen Neuling auf objektive Programmierung, so leid für die dumme Frage. Ich mache eine Art Messenger für ein soziales Netzwerk, und ich stehe fest an der sehr einfachen Sache - wie man eine Nachricht vom Objekt einer Klasse an das Objekt der anderen Klasse sendet?iphone - Wie man eine Nachricht von einem Objekt zum anderen sendet?

Ich habe eine Klasse, genannt SignInViewController, die eine Instanz von SignUpViewController nach einer SignUpButton schafft gedrückt und fertig einfach so:

SignUpViewController *signUpViewController = [[SignUpViewController alloc]init]; 
signUpViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentModalViewController:signUpViewController animated:YES]; 

Dann, nach ein paar Management mit dem AFNetwork getan (ich verwende ein spezielle Klasse für diese, die so genannte Servermanager), ich mag die Nachricht senden ein neues Textfeld in meiner SignUpViewController Instanz zu ziehen, und ich denke, es ist wie das geschehen könnte:

im SignUpViewController.h:

im ServerManager.m:

[[SignUpViewController self] showTheCodeTextField]; 

und dann in SignUpViewController.m:

-(void)showTheCodeTextField 
{ 
    NSLog(@"Time to draw codeTextField"); 
} 

Ich bin ein vertrautes SIGABRT bei letzteren Codezeilen zu bekommen. Ich weiß, dass ich etwas falsch mache, aber ich kann einfach nicht herausfinden, was genau.

Könnten Sie mir bitte helfen?

+0

Welche Klasse ist wie verbunden? Macht keinen Sinn .. Bitte sei klar damit jemand helfen kann .. –

Antwort

2

Sie können NSNotificationCenter verwenden, um das zu erledigen. Nachdem Sie Ihren SignUpController präsentiert haben, fügen Sie ihn als Beobachter von Benachrichtigungen hinzu, die der ServerManager sendet.Und wenn diese Benachrichtigung eintrifft, rufen Sie Ihre Nachricht auf, um die Ansicht zu zeichnen.

So, nach

SignUpViewController *signUpViewController = [[SignUpViewController alloc]init]; 
signUpViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentModalViewController:signUpViewController animated:YES]; 

Vereinbaren Sie einen Beobachter

[[NSNotificationCenter defaultCenter]signUpViewController selector:@selector(showTheCodeTextField:) name:@"SignUpSucceded" object:[ServerManager sharedInstance]]; 

als in Ihrem Server-Manager, eine Benachrichtigung senden, dass die Textfield containig, und die Methode in Ihrem SignUp bekommt called.That der it.You've bekam das Textfeld ein Text in Ihrem notification.userinfo

[[NSNotificationCenter defaultCenter]postNotificationName:@"SignUpSucceded" object:self userInfo:[NSDictionary dictionaryWithObject:textField.text forKey:@"login"]]; 
    } 

Gett Tour Text ing hier in signUpView

-(void)showTheCodeTextField:(NSNotification*)notification 
{ 
    NSLog(@"Time to draw codeTextField %@",[notification userInfo]); 
} 
1

Ihre ServerManager Klasse muss einen Verweis auf die SignUpViewController Instanz haben. Im Moment erhalten Sie die self der Klasse nicht der Klasseninstanz. Sie sollten wahrscheinlich eine Eigenschaft in Ihrer ServerManager Klasse haben, die auf die Instanz Ihrer SignUpViewController verweist.

1

Sieht aus wie Sie versuchen, eine Nachricht an eine Klasse senden (SignUpViewController) stattdessen es ist instance/das Objekt (signUpViewController):

ändern

[[SignUpViewController self] showTheCodeTextField]; 

zu

[[signUpViewController self] showTheCodeTextField]; 

und Sie sollten in Ordnung sein

+1

du nimmst an er hat eine referenz. – mydogisbox

+0

@mydogisbox: das ist wahr: richtige Antwort ist Kombination von Ihnen und mir: Split 7,5/7,5? ;) –

+1

Hört sich gut an! – mydogisbox

1

Wenn Sie eine Instanz von SignUpViewController in Ihrer Servermanager-Instanz hat, dann würden Sie diese Konvention verwenden (vorausgesetzt, Ihre Instanz namens ‚signUpController‘):

[[self signUpController] showTheCodeTextField]; 

Eine andere Möglichkeit wäre, um Ihre Servermanager eine Benachrichtigung zu senden, enthält einen Verweis auf Ihren SignUpViewController und übergibt die showTheCodeTextField-Nachricht an diesen. Dies setzt voraus, dass Sie wissen, wie Sie eine Benachrichtigung senden können.

Viel Glück für Sie in Ihren Bemühungen. Du siehst aus, als würdest du gerade in Cocoa und Objective-C anfangen. Halte durch!

2

es ist besser, wenn Sie Delegaten verwenden auf der Schaltfläche Ereignisse Ihre Stellvertretung erklären, wo Sie Ihre Schaltfläche erstellen und verwenden nur diese Delegaten in jeder Klasse, wo immer Sie gerade diese Delegaten verwenden mögen es sehr hilfreich lernen delegieren für objektive c ist es einfach und effizient