initWithContentOfFile: ist deprecates bei Initialisierung

M

michael m.

Aktives Mitglied
Thread Starter
Dabei seit
29.12.2006
Beiträge
407
Reaktionspunkte
6
Hallo,

in meinem Code lese ich eine Textdatei ein und benutze folgenden Code:

Code:
// Der Komplette Dateiinhalt wird in das Objekt dateiInhalt geschrieben
        NSString *dateiInhalt = [[NSString alloc] initWithContentsOfFile:dateiMitPfad];

Dieser Code funktionier zwar aber es gibt einen gelben Hinweis:
initWithContentOfFile: ist deprecated: first deprecated in OSX 10.4

Also ist dieser Codeabschnitt seit OSX 10.4 veraltet.

Die neue Schreibweise ist nun:
Code:
NSString *dateiInhalt =[[NSString alloc] initWithContentsOfFile:dateiMitPfad encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
Jetzt weiss ich aber nicht was ich nun konkret bei encoding: angeben soll?
Ich schätze mal (NSUTF8StringEncoding) könnte man nehmen aber so genau weis sich das nicht.

Bei error: müsste was im falle eines Fehlers etwas stehen, aber da habe ich überhaupt keine Ahnung was man da so angibt.

Bei Google habe lange gesucht und gefunden habe ich dann (&error) aber funktionieren tut es nicht.

Für Hilfe bin ich Dankbar

Viele Grüsse
Michael
 
Beispiel siehe unten…

Viele Grüße

Code:
-(BOOL)doSomeAction:(id)sender
{

    // …
    
    NSString *string = @"/path/to/file.txt";
    
    if([string length] < 1)
    {
    
        return NO;
    
    }
    
    // …
    
    NSError *error = nil;
    
    NSStringEncoding stringEncoding = 0;
    
    // …
    
    string = [NSString stringWithContentsOfFile:string
                                   usedEncoding:&stringEncoding
                                          error:&error];
    
    if(error != nil)
    {
    
        // …
        
        NSLog(@"ERR: %@", error);
        
        // …
        
        return NO;
        
        // …
    
    }
    
    // …
    
    NSLog(@"TEXT: %@", string);
    
    // …
    
    return YES;
    
    // …

}
 
Jetzt weiss ich aber nicht was ich nun konkret bei encoding: angeben soll?
Ich schätze mal (NSUTF8StringEncoding) könnte man nehmen aber so genau weis sich das nicht.

Bei error: müsste was im falle eines Fehlers etwas stehen, aber da habe ich überhaupt keine Ahnung was man da so angibt.

Wenn dich die Fehlermeldung nicht interessiert, brauchst du beim Error nur NULL anzugeben. &error ist ein Pointer auf einen Pointer (*error).
 
Vielen Dank hat geholfen.

Es funktioniert nun.
Code:
// Fehlervaribalen
NSError *errorVariable;
        
// Der Komplette Dateiinhalt wird in das Objekt dateiInhalt geschrieben
NSString *dateiInhalt =[[NSString alloc] initWithContentsOfFile:dateiMitPfad encoding:NSUTF8StringEncoding error: &errorVariable];

Beim lernen von Objective-C muss man ein gewaltiges Wissen durchforsten.
Lohnt sich das ganze denn noch überhaupt, jetzt wo das Swift da ist?

In Swift Code die ich mal gesehen habe, sind Abschnitte, die wirklich mit Objektiv-C verwechselt werden könnten.

Viele Grüsse
Michael
 
Du hast einen Fehler.
Du musst errorVariable zwingend nil setzen.

Viele Grüße
 
Wenn dich die Fehlermeldung nicht interessiert, brauchst du beim Error nur NULL anzugeben. &error ist ein Pointer auf einen Pointer (*error).

Danke für den Tipp. Interessiert mich tatsächlich erstmal überhaupt nicht und daher setzte ich das auf nil.
Sollte doch mal ein Fehler auftreten, dann weiss ich ja, das man es dann mit der errorVariable abfragen kann.
Ich lasse es mit der errorVariable in meinem code aber dennoch kommentiert als Gedächtnisstütze drin

Vielen Dank
Michael

P.S. Nach all den lesen von Daten, filtern, berechnen und Umformen werde ich mir nun Gedanken machen müssen, wie das ganze speichern.
Schätze mal das jetzt wohl das Thema CoreData dran ist :d
 
Entwickelt denn keiner mehr OSX Dektop Applikationen?

Alles was man im Netz findet ist entweder absah uralt mit xcode 2x und 3x alles andere nur noch für iOS?
Als Anfänger ist das schon ziemlich heawy mit der neuen xcode 6 IDE.

Michael
 
Nochmals erwähnt - Deine Zeile 2 ist falsch und muss NSError *errorVariable = nil; lauten…

Entwickelt denn keiner mehr OSX Dektop Applikationen?
Doch, viele! iOS ist ja nur spielen :D

Alles was man im Netz findet ist entweder absah uralt mit xcode 2x und 3x
Auch wenn die Tutorials etc. alt sind, so ist die Sache an sich immer noch gleich.

Viele Grüße
 
@little_pixel

Danke, die 2. Zeile hatte ich in meinem Code geändert.

Vielen Dank an alle für die hilfreichen Tipps.

Michael
 
ist das nicht auch noch falsch?

encoding:NSUTF8StringEncoding

du musst da eine variable angeben, in der das encoding gespeichert wird und nicht das encoding selber.
das liefert dir die methode, das musst du nicht angeben…
 
Das ist richtig.
Er nimmt ja nicht die usedEncoding: Version.

Viele Grüße
 
Zurück
Oben Unten