8

ドキュメントディレクトリ内のファイルのサイズを返すこの関数を作成しましたが、機能しますが、関数を修正したいという警告が表示されます:

-(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: is deprecated first deprecated in ios 2.0」です。それはどういう意味ですか、どうすれば修正できますか?

4

2 に答える 2

9

ほとんどの場合、廃止されたメソッドに関するレポートを取得すると、参照ドキュメントでそれを調べ、使用する代替方法を教えてくれます。

fileAttributesAtPath:traverseLink: 特定の場所で指定されたファイルの POSIX 属性を記述する辞書を返します。(iOS 2.0 では廃止されました。代わりに attributesOfItemAtPath:error: を使用してください。)

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 を使用する必要があります。

于 2012-11-08T16:18:24.370 に答える
2

受け入れられた回答は、質問から処理するのを忘れましたtraverseLink:YES

改善された答えは、 と の両方attributesOfItemAtPath:error:を使用していstringByResolvingSymlinksInPathます。

NSString *fullPath = [getFilePath stringByResolvingSymlinksInPath];
NSDictionary *fileDictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil];
于 2015-11-11T18:13:48.000 に答える