• 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

Upload to Server klappt nicht.

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Hallo zusammen,

auf Youtube hab ich mir ein Video angeschaut bei dem jemand erklärt wie man den Inhalt einer textdatei auf einem Server in einer TextView anzeigen lässt, anschließend wird gezeigt wie der Upload gehen soll.
Download klappt bei mir aber der upload will nicht.
Was ich jetzt nicht ganz weiß ist, ob ich eine existierende Datei angeben muss und er den text dann darein schreibt.
oder ob es eine neu zu erstellende datei sein kann wo der text dann rein kommt.

Meine upload funktion sieht folgender maßen aus
Code:
-(IBAction)upload
{
    NSString *myString =textView.text;
    NSURL *url = [NSURL URLWithString:@"ftp://username:[email protected]/textfile.txt"];
    NSError *error;
    BOOL ok =[myString writeToURL:url atomically:NO encoding:4 error:nil];
    
    if (!ok) 
    {
        NSLog(@"Fehler bei %@ und %@",url,[error localizedFailureReason] );
    }
}
username, myserver und passwort sind natürlich nur platzhalter, kann euch ja nicht den login geben;)
das ding ist das der immer ohne Fehlermeldung abstürtzt, woran kann das liegen?
Aus der Class Reference werd ich auch nicht unbedingt schlau.
 
Zuletzt bearbeitet:

Steinchen

Finkenwerder Herbstprinz
Registriert
15.04.10
Beiträge
470
Hallo zusammen,

auf Youtube hab ich mir ein Video angeschaut bei dem jemand erklärt wie man den Inhalt einer textdatei auf einem Server in einer TextView anzeigen lässt, anschließend wird gezeigt wie der Upload gehen soll.
Download klappt bei mir aber der upload will nicht.
Was ich jetzt nicht ganz weiß ist, ob ich eine existierende Datei angeben muss und er den text dann darein schreibt.
oder ob es eine neu zu erstellende datei sein kann wo der text dann rein kommt.

Meine upload funktion sieht folgender maßen aus
Code:
-(IBAction)upload
{
    NSString *myString =textView.text;
    NSURL *url = [NSURL URLWithString:@"ftp://username:[email protected]/demo/textfile.txt"];
    NSError *error;
    BOOL ok =[myString writeToURL:url atomically:NO encoding:4 error:nil];
    
    if (!ok) 
    {
        NSLog(@"Fehler bei %@ und %@",url,[error localizedFailureReason] );
    }
}
username und passwort sind natürlich nur platzhalter, kann euch ja nicht den login geben;)
das ding ist das der immer ohne Fehlermeldung abstürtzt, woran kann das liegen?
Aus der Class Reference werd ich auch nicht unbedingt schlau.

Hi,

will der da die Datei direkt auf den FTP-Server "gespeichert" haben? Ohne Umweg über lokales Tempfile?

Komisch...

cu
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Also so wie ich das verstehe, hat er das so angegeben das er den Inhalt im Textfeld in einer Datei (die, so denke ich, neu angelegt wird) auf dem FTP-Server speichert. Doof ist nur das gesagt wird, das es so funktioniert, wird aber nicht vorgeführt. und jezt klappt es natürlich nicht bei mir :(

Hier mal der Link: http://www.youtube.com/watch?v=C4gpwrh3d5c
 

Steinchen

Finkenwerder Herbstprinz
Registriert
15.04.10
Beiträge
470
Hi,

en größeres Display hatte der auch gerade nicht ;) Naja egal, gibts denn garkeine Fehler, weder im Log noch sonstwo? Garnichts woraus man schlau werden kann?

Evtl. mal den Netzwerkverkehr mitlesen und dann rausfinden ob das Login beim Server usw. funktioniert hat oder nicht.

cu
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
also der Log gibt keine Fehlermeldung aus. und beim build in XCode gibts auch keine Fehlermeldung.
ob es geklappt hat oder nicht merke ich nur daran ob er in die if-Bedingung springt.
Wenn ich
[error localizedFailureReason]

im NSLog stehen hab schmiert der ab... mach ich es weg schmiert der zwar nicht ab aber es funzt auch nix.
 

Steinchen

Finkenwerder Herbstprinz
Registriert
15.04.10
Beiträge
470
Hi,

dann scheint er ja garnix zu machen.

Ich würd den Error mal noch auslesen der derzeit ins nichts läuft bei writeToUrl ....error:nil und mir da mal ausgeben lassen was Masse ist.

cu
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Das bringt auch nix da schniert der ja ab
habe das jetzt genauso wie es im Video ist:
Code:
-(IBAction)upload
{
    NSString *myString =textView.text;
    NSURL *url = [NSURL URLWithString:@"ftp://username:[email protected]/textfile.txt"];
    NSError *error;
    BOOL ok =[myString writeToURL:url atomically:YES encoding:4 error:&error];
    
    if (!ok) 
    {
        NSLog(@"Fehler bei %@ and %@ ",url,[error localizedFailureReason]);
    }
}
Fakt ist das der da abschmiert, das liegt an dem [error localizedFailureReason], wenn ich wüsste wie ich da einen error ausgeben könnte wäre ich schon weiter

Kann mir vielleicht jemand sagen wie ich zumindest den Fehler richtig ausgeben kann?
 
Zuletzt bearbeitet:

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Auf dem Server läuft auch ein ftp-Server? Du hast dort auch Schreibrechte im Zielverzeichnis?

MacApple
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Ja sicher, ich habe da schon mehrere Sachen hochgeladen. Die textdatei die bei der Download-Funktion angezeigt wird musste ich ja auch hochladen. Wenn er wenigstens den Fehler ausgeben würde, das würde mir echt helfen.

EDIT: Wenn ich zuerst auf Download klicke (was auch funzt) und dann auf Upload bekomme ich jetzt eine Fehlermeldung:
Code:
2010-04-28 18:51:49.335 WriteToServer[1688:207] *** -[UIControlTargetAction localizedFailureReason]: unrecognized selector sent to instance 0x3b172c0
2010-04-28 18:51:49.336 WriteToServer[1688:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIControlTargetAction localizedFailureReason]: unrecognized selector sent to instance 0x3b172c0'
habs jetzt genau so wie im Video... scheint mir als würde ich irgendwo ein falsches Argument übergeben.
 
Zuletzt bearbeitet:

Steinchen

Finkenwerder Herbstprinz
Registriert
15.04.10
Beiträge
470
Hi,

sieht so aus als ob der Error kein Error ist, oder als ob man den nicht lokalisieren kann.

So kommts mir mal vor.

cu
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Mittlerweile meine ich zu wissen woran es liegt, kann den Fehler aber (noch) nicht beheben. Also ich glaube das die Definition von error fehlerhaft ist. denn ein korrektes erzeugen eines Objekts von NSError sieht anders aus (siehe Doku). da sind noch einige Parameter erforderlich wie z.b. fehlerdomain und solche scherze... muss ich erstmal durchsteigen was das alles heißt, oder kann mir das jemand schnell sagen?
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Also erstmal, dein NSStringEncoding ist auf 3, also NSJapaneseEUCStringEncoding eingestellt, warum?
Wieso nimmst du nicht einfach ASCII, also NSASCIIStringEncoding. Sonst sollte alles in Ordnung sein.

ahh, there we go: In der Doku steht aber leider auch nichts davon, dass 'localizedFailureReason' in iPhone OS existiert. Nur, dass ab OS X 10.4. Du musst also 'localizedDescription' nehmen, die gibts seit iPhone OS 2.0.

Gruss ppocket

EDIT: falsch... es gibt die doch!

EDIT 2: du musst keinen error selber anlegen, das macht NSString schon für dich. Also vergiss die domains uns so weiter...
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Hä? wo ist mein StringEncoding auf 3? der ist auf 4. mittlerweile hab ich aber NSUTF8StringEncoding hingeschrieben. ist das gleiche aber sieht schöner aus. der typ im video meinte das müsste man so machen da es andernfalls zu Fehlern kommt, deswegen UFT8. Des weiteren ist das sehr merkwürdig das diese Fehlermeldung mit NSInvalidArgumentException nur angezeigt wird wenn ich zuvor auf Download geklickt habe.

Hier nochmal der Code:
Code:
-(IBAction)upload  // Macht Probleme
{
    NSString *myString =textView.text;
    NSURL *url = [NSURL URLWithString:@"ftp://username:[email protected]/textfile.txt"];
    NSError *error;
    BOOL ok =[myString writeToURL:url atomically:NO encoding:NSUTF8StringEncoding error: &error];
    
    if (!ok) 
    {
        NSLog(@"Fehler bei %@ and %@ ",url,[error localizedFailureReason]);
        NSLog(@"Fehler");
    }
    
}

-(IBAction)download  //Funktioniert ohne Probleme
{
    NSURL *url=[NSURL URLWithString:@"http://username:[email protected]/textfile.txt"];
    NSString *myString =[NSString stringWithContentsOfURL:url encoding:4 error:nil];
    textView.text = myString;
}
Der schmiert immer noch mit der selben Meldung ab, egal as ich da ändere, laut doku kann es aber nur an writeToURL oder dem encoding liegen.
BTW: NSASCIIStringEncoding geht auch nicht... kommt die gleiche Fehlermeldung.

EDIT: Vielleicht hab ihr ja selbst einen ftp-Server, dann könnt ihr das ja mal ausprobieren, wenn ihr zeit und lust habt.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Mann ich lese heute ja alles falsch... natürlich ist das 4 und damit UTF-8 und damit auch völlig in Ordnung :=). tut mir leid!

Also jetzt muss ich dich mal was fragen: Du hast hier jetzt 3x einen anderen Code gepostet, und jedes Mal hast du die wichtigste Zeile:

Code:
BOOL ok =[myString writeToURL:url atomically:NO encoding:NSUTF8StringEncoding error: &error];

anders geschrieben. Was sollen wir dir denn da helfen? Dies ist die neuste Version und

vorher hattest du:

Code:
BOOL ok =[myString writeToURL:url atomically:YES encoding:4 error:&error];

und am Anfang:

Code:
 BOOL ok =[myString writeToURL:url atomically:NO encoding:4 error:nil];

Welche Version benutzt du jetzt denn?

Gruss ppocket

PS: Weiter benutzt du für upload/download nicht das selbe Protokoll! Einmal FTP, einmal HTTP, welches wird vom Server verlangt?
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Sorry, ich ändere ständig meinen Code und probiere Sachen aus.
Folgende Zeile wird im Video benutzt und habe ich auch momentan eingebaut:
Code:
[BOOL ok =[myString writeToURL:url atomically:NO encoding:NSUTF8StringEncoding error: &error];
und da steckt irgendwo der teufel im detail, die doku sagt wenn da ein Fehler bei raus kommt liegt das entweder an writeToURL oder am enconing , aber das kann eigentlich gar nicht sein, das encoding muss stimmen und für writeToURL habe ich auch definitiv alle rechte, weil ich eben der admin bin.ich guck nochmal was genau über writeTO URL geschrieben steht.

EDIT: Macht man einen Upload nicht immer mit ftp?
Doch mein Server unterstützt das 100 pro. in der verwaltung klick ich ja immer ftp-upload an.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Benutz für den Download auch mal FTP... wetten, das funktioniert dann nicht mehr?

Gruss ppocket
 

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Fehlanzeige, der Download klappt auch wenn ich ftp davor schreibe. also es bleibt alles unverändert, auch wenn ich upload per http versuchen will. habe es aber mittlerweile hinbekommen das er nicht immer abschmiert, wenn ich auf upload klicke. wenn ich zuerst download klicke und dann auf Upload schmiert der nicht ab. wenn ich dieses localizedFailure weglasse wird dieses error-Objekt ausgegeben:
Code:
<UIControlTargetAction: 0x3b1d540>
was aber irgendwie nicht viel bringt.
Wenn ich allerdings zuerst auf Upload klicke crasht der Simulator ohne im Log einen Kommentar abzugeben.

EDIT: Wenn ich error vorher auf nil setze und dann die methode aufrufe, kommt keine fehlermeldung mehr. allerdings wird als error dann auch immer null ausgegeben, bringt also nix
 
Zuletzt bearbeitet:

bginner

Ingrid Marie
Registriert
13.12.09
Beiträge
266
Ja ich weiß man soll nicht zwei mal hintereinander posten, aber wenn ich meinen alten Thraed erneut editiere geht irgendwann die Übersicht flöten.
Zu Thema:
Ich habe heruasgefunden das ich mir die writeToURL Methode echt abschminken kann. Das geht nur wenn man einen Pfad auf dem lokalen Dateisystem angibt... also z.B.:/downloads/documents/newtextfile.txt dann geht das und dann steht da auch was drin. ok wäre auch ein bisschen zu einfach gewesen. aber wie verwirrend ist denn das bitteschön? zumal es die funktion writeToFile gibt, und laut der doku sind die beiden methoden sogar identisch bis auf einen parameter. wenn man einen Upload hinbekommen möchte muss man schon teifer in die trickkiste greifen. Hat jemand eine Ahnung von euch wie man sowas realisieren könnte? In der Documentation wird ausführlich auf einen Download eingegangen aber vom Upload ist keine rede.. ich verstehe das nicht. Oder weiß jemand vielleicht einen Link?
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Ja, ein URL ist halt wahrscheinlich einfach eine spezielle, universellere Art, einen Dateipfad für diese spezifische Methode zu beschreiben. Ich denke auch, dass 'writeToURL:' in dem Sinne äquivalent zu 'writeToFile:' ist.

Wenn du eine Verbindung mit einem Server für Down/Up herstellen willst, musst du dich schon mit Sockets und dessen Gefährten anfreunden. Und dich dadurch auf Core Foundation oder C selbst einlassen. Cocoa bringt hier nur die Sachen zum Download mit.

Gruss ppocket
 

floorjiann

Strauwalds neue Goldparmäne
Registriert
18.01.07
Beiträge
639
Wenn du eine Verbindung mit einem Server für Down/Up herstellen willst, musst du dich schon mit Sockets und dessen Gefährten anfreunden. Und dich dadurch auf Core Foundation oder C selbst einlassen. Cocoa bringt hier nur die Sachen zum Download mit.

Falsch. Man braucht nur einen NSURLRequest, nix mit Sockets usw.
Beispiel:

Code:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL urlWithString:@"someURL"]];
NSData *data = [[NSData alloc] init];
[request setHTTPBody:data] 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];