Cocoa Rückmeldung eines Objects

O

obi

Aktives Mitglied
Thread Starter
Dabei seit
04.01.2007
Beiträge
233
Reaktionspunkte
12
Hallo,

ich arbeite an einem iPhone App, welches die Erstellung eines Accounts (local und auf einem Server) erfordert.
Ich habe bereits den ViewController für die Settings sowie ein Object zum versenden und empfangen der benötigten Daten implementiert.

Könnt ihr mir ggf. bei einer Strategie für das folgende Problem helfen?
Sobald die Accountdaten eingegeben wurden, wird das Webobject aufgerufen, welches die Daten an den Server schickt. Im Gegenzug empfängt es die Antwort des Servers (XML) und parst sie. Während dieser Zeit hätte ich gerne eine Anzeige für den User, dass das iPhone Daten sendet.
Wenn die Anfrage erfolgreich war, müsste das WebObject den Erfolg an den ViewController melden, damit dieser dies dem Nutzer meldet.
Wenn die Anfrage nicht erfolgreich war (z.B. kein Internet) dann muss dies ebenfalls gemeldet werden.

Hat einer vielleicht eine Idee für die letzten beiden Sätze? Also wie bekomme ich nach einer unbekannt langen Zeit die Antwort aus dem Webobject in den ViewController?
Ich bin noch relativ frisch, weshalb mir der Funktionsumfang noch nicht so bekannt ist.
Bitte verzeiht, wenn die Frage zu simple ist.

Gruß,

Obi.
 
Delegate Pattern, oder NSNotification.

Alex
 
Ich versuche es gerade mit Delegate, leider erhalte ich keine Antwort:

In den Setting.h
Code:
#import "WOSettingsNewAccount.h"
@interface HASettingsController : UITableViewController <WOSettingsNewAccountDelegate>
...

Settings.m
Code:
-(void)saveSettings: (id)sender{
    saveNewAccount = [[WOSettingsNewAccount alloc] init];
    saveNewAccount.delegate=self;
}

-(void)saveSettingsDelegate{
	XLog("");

}

-(void)testDelegate{
    XLog("");
}

WebObject.h
Code:
@interface WOSettingsNewAccount : NSObject <NSXMLParserDelegate>
@protocol WOSettingsNewAccountDelegate
-(void)saveSettingsDelegate;
-(void)testDelegate;

@end

Webobject.m
Code:
-(void)saveSettings{
if([delegate respondsToSelector: @selector(saveSettingsDelegate: )]) {	
			XLog("Delegate");
			[delegate performSelector: @selector(saveSettingsDelegate: )];
		}
}

bzw.

Code:
-(void)parser: (NSXMLParser *)parser didEndElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName{
if (glName && glName2 && glID && glID2 && glPasswort) {
		if([delegate respondsToSelector: @selector(testDelegate: )]) {	
			XLog("Delegate 2");
			[delegate performSelector: @selector(testDelegate: )];
		}
	}

Beides gibt kein Log aus.

Bin sehr dankbar für Hilfe.

PS: Kann man hier keinen Code mehr eingeben oder sehe ich den Button nicht?
 
Zuletzt bearbeitet:
Code:
if([delegate respondsToSelector: @selector(saveSettingsDelegate: )]) {

Das ist nach Deinem Code immer falsch, der "performSelector" wird also nie ausgeführt.

Hint: Wie heisst der Selector? Heisst er wirklich "saveSettingsDelegate:"?

Alex
 
Es tut mir leid. Ich stehe auf dem Schlauch.
Warum ist saveSettingsDelegate nicht der Selector?
Ich habe es aus einem meiner anderen (funktionierenden) Objekte übernommen.

Mir ist aufgefallen, dass die Funktion den gleichen Namen hat. Ich habe dies im ursprünglichen Post geändert.
 
weil der selector mit doppelpunkt eine methode erwartet, welche parameter empfängt. dein check müsste sein:

Code:
if([delegate respondsToSelector: @selector(saveSettingsDelegate)]) {
(dasselbe natürlich dann bei performSeletor...)

Gruß,
Christian
 
Hmm ok daran hatte ich sogar mal gedacht, aber habe es nicht ausprobiert.
Ich schaue später mal, ob es jetzt geht.
Danke.
 
Vielen Dank, das war der Fehler.
Nun funktioniert es.
 
Zurück
Oben Unten