2012-11-08 17 views
7

Ich habe diese Funktion, die die Größe der Datei in Dokumentenverzeichnis gibt, es funktioniert, aber ich erhalte Warnung, dass ich beheben möchten, die Funktion:Warning ‚fileAttributesAtPath: traverseLink veraltet ist: zuerst in ios veraltet 2.0

-(unsigned long long int)getFileSize:(NSString*)path 
{ 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *getFilePath = [documentsDirectory stringByAppendingPathComponent:path]; 

NSDictionary *fileDictionary = [[NSFileManager defaultManager] fileAttributesAtPath:getFilePath traverseLink:YES]; //*Warning 
unsigned long long int fileSize = 0; 
fileSize = [fileDictionary fileSize]; 

return fileSize; 
} 

* Die Warnung lautet 'fileAttributesAtPath: traverseLink: wird in IOS 2.0 nicht mehr empfohlen'. Was ist das und wie kann ich es beheben?

+1

Mögliche Duplikat [? Wie Probleme mit fileAttributesAtPath Warnung lösen] (http://stackoverflow.com/questions/9019353/how-to- resolve-issues-with-fileattributesatpath-warning) –

Antwort

8

Wenn Sie in den meisten Fällen einen Bericht über eine veraltete Methode erhalten, suchen Sie in den Referenzdokumenten nach und erfahren, welcher Ersatz verwendet werden soll.

fileAttributesAtPath:traverseLink: Returns a dictionary that describes the POSIX attributes of the file specified at a given. (Deprecated in iOS 2.0. Use attributesOfItemAtPath:error: instead.)

Verwenden Sie stattdessen attributesOfItemAtPath:error:.

Hier ist die einfache Art und Weise:

NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:getFilePath error:nil]; 

Je vollständiger Weg ist:

NSError *error = nil; 
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:getFilePath error:&error]; 
if (fileDictionary) { 
    // make use of attributes 
} else { 
    // handle error found in 'error' 
} 

Edit: Falls Sie nicht wissen, was Mittel veraltet, es bedeutet, dass das Verfahren oder Die Klasse ist jetzt veraltet. Sie sollten eine neuere API verwenden, um eine ähnliche Aktion auszuführen.

+0

Können Sie mir bitte ein Beispiel für die Verwendung von attributesOfItemAtPath geben: error: – DanM

+0

Es ist praktisch identisch mit dem, was Sie verwenden. Sie können "nil" für den Parameter 'error:' übergeben, um schnell zu starten. – rmaddy

+1

'attributesOfItemAtPath: error:' unterstützt Symlink nicht. Ihr Code hat also nicht das gleiche Verhalten wie 'traverseLink: YES' von der Frage. –

1

Die angenommene Antwort vergessen traverseLink:YES aus der Frage zu behandeln.

Eine verbesserte Antwort wird unter Verwendung von sowohl attributesOfItemAtPath:error: und stringByResolvingSymlinksInPath:

NSString *fullPath = [getFilePath stringByResolvingSymlinksInPath]; 
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil]; 
+1

Das ist viel besser als die angenommene Antwort! –