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
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.
Und aufrufen tu ich die Methode „postNotificationNameOnMainThread“ folgend: (ebenfalls in der selben Klasse)
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:
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
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