• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

NSNotifications bei Multi-Threading. Work-Thread soll NSNotification an Main senden

  • Ersteller Mitglied 26876
  • Erstellt am

Mitglied 26876

Gast
Hey Jungs!

Ich bin nun endlich auch dabei! Wusele' viel rum, lese viel und versuche Cocoa zu lernen.
Bis jetzt bin ich sehr begeistert von den NSNotifications, jedoch muss/möchte ich eine NSNotification aus einem Working-Thread hinaus zum Main-Thread senden. Nun, es gibt im Internet viele verschiedene Lösungen. Ich möchte nur einen NSString raussenden. Aber mein Problem ist, dass die Internet-Lösungen nicht funktionieren.
(Ich weiß, Fehler macht nur der Layer8 und wenn's nur ein doofer Fehler ist, sorry…)

Nun, ich habe es folgend probiert:


Hier wird eine NSNotifications gesendet. Diese Methode steht in der Klasse, die im externen Thread läuft
Code:
-(void)mainThread_PostNotificationName:(NSString*)notification {
	
		NSNotificationCenter * center;
		center = [NSNotificationCenter defaultCenter];
		[center postNotificationName:notification
						  object:self];
}

Hier wird einfach nur die obenstehende Funktion aufgerufen. Und zwar so, dass sie im Main-Thread ausgeführt wird.
Als Parameter dient ein NSString, der die Nachricht enthält. Diese soll weiter gegeben werden an die Methode, die im Main-Thread ausgeführt wird. Diese Methode steht genauso in der gleichen Klasse.

Code:
-(void)postNotificationNameOnMainThread:(NSString*)notification {
	 
	 [self performSelectorOnMainThread:@selector(mainThread_PostNotificationName)
							withObject:notification
						 waitUntilDone:YES ];
	 }

Und aufrufen tu ich die Methode „postNotificationNameOnMainThread“ folgend: (ebenfalls in der selben Klasse)
Code:
	[self postNotificationNameOnMainThread:@"test"];


Für mich sieht es logisch aus und lässt doch durchblicken. Allerdings bekomme ich, wenn ich nun das Programm laufen lasse, im Log folgende Meldung:
Code:
2010-07-06 19:02:15.891 AirTuneSync[50115:a0f] -[SyncController mainThread_PostNotificationName]: unrecognized selector sent to instance 0x100206f00
2010-07-06 19:02:15.896 AirTuneSync[50115:a0f] -[SyncController mainThread_PostNotificationName]: unrecognized selector sent to instance 0x100206f00

Was mich wundert ist, dass er diese Ausgabe zwei Mal tätigt, wobei ich die Methode nur einmal aufrufe.

Woran kann das liegen und vor Allem: WAS ist jetzt an meinem Work-Around falsch?


Bitte um Hilfe,
Jan
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Sieht aus, als habest Du einen Doppelpunkt übersehen: "@selector(mainThread_PostNotificationName)" sollte m.E. "@selector(mainThread_PostNotificationName: )" lauten.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Mitglied 26876

Mitglied 26876

Gast
Oh natürlich!
Und ich habe mich schon gewundert, warum Xcode es nicht „erkennt“*und magisch hervorhebt.

Ja doch wieder ein Anfänger-Fehler. Mache Cocoa auch erst seit knapp 10 Tagen.
Und es macht einfach Spaß!

Danke für die schnelle Hilfe!
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Aber nicht ein Cocoa-Fehler, sondern eher ein Syntaxfehler von Objective-C! :) nur, dass du mir nicht eine Bibliothek mit einer Programmiersprache verwechselst :-D

Gruss ppocket
 

Mitglied 26876

Gast
Nein, das habe ich schon begriffen:

Cocoa: Library der Elemente und quasi vorgegebene H-Dateien, Vokabular
Objective-C: Syntax, Grammatik, Werkzeug