2012-11-08 74 views
7

我做了這個函數返回的文件目錄中的文件的大小,它的工作原理,但我得到警告說,我要修復,功能:警告「fileAttributesAtPath:traverseLink被棄用:在IOS第一棄用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; 
} 

*警告是'fileAttributesAtPath:traverseLink:已棄用,先在ios 2.0中棄用'。這是什麼意思,我該如何解決它?

+1

的可能的複製[?如何解決fileAttributesAtPath警告問題(http://stackoverflow.com/questions/9019353/how-to- resolve-issues-with-fileattributesatpath-warning) –

回答

8

在大多數情況下,當您獲得有關已棄用方法的報告時,請在參考文檔中查找它,並告訴您要使用哪種替代方法。

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.)

所以用attributesOfItemAtPath:error:代替。

這裏的簡單的方法:

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

更完整的方法是:

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

編輯:如果你不知道什麼棄用手段,這意味着該方法或班級現在已經過時了。您應該使用更新的API來執行類似的操作。

+0

你可以給我一個例子如何使用attributesOfItemAtPath:error: – DanM

+0

它幾乎與你正在使用的相同。您可以將'nil'傳遞給'error:'參數以快速啓動。 – rmaddy

+1

'attributesOfItemAtPath:error:'不支持符號鏈接。所以你的代碼與問題中的'traverseLink:YES'不一樣。 –

1

接受的答案忘了從問題中處理traverseLink:YES

改進的答案是同時使用attributesOfItemAtPath:error:stringByResolvingSymlinksInPath

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

這比接受的答案要好得多! –