警告'fileAttributesAtPath:traverseLink已弃用:首先在ios 2.0中弃用

时间:2012-11-08 16:16:03

标签: ios xcode

我做了这个函数,它返回文件目录中文件的大小,它可以工作,但我得到警告,我希望修复,函数:

-(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中首先弃用的'。它是什么意思以及如何解决它?

2 个答案:

答案 0 :(得分:9)

在大多数情况下,当您收到有关已弃用方法的报告时,您可以在参考文档中查找它,它会告诉您要使用的替代方法。

  

<强> fileAttributesAtPath:traverseLink:   返回一个字典,该字典描述在给定时指定的文件的POSIX属性。 (在iOS 2.0中不推荐使用。使用attributesOfItemAtPath:错误:代替。)

所以请改用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来执行类似的操作。

答案 1 :(得分:2)

接受的答案忘记了处理问题的traverseLink:YES

改进的答案是同时使用attributesOfItemAtPath:error:stringByResolvingSymlinksInPath

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