2012-11-08 24 views
7

tôi đã thực hiện chức năng này trả về kích thước của tập tin trong thư mục tài liệu, nó hoạt động nhưng tôi nhận được cảnh báo mà tôi muốn sửa chữa, chức năng:Cảnh báo 'fileAttributesAtPath: traverseLink được chấp nhận: đầu tiên bị phản đối ở 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; 
} 

* Cảnh báo là 'fileAttributesAtPath: traverseLink: không được dùng nữa lần đầu tiên trong ios 2.0'. Nó có nghĩa là gì và làm thế nào tôi có thể sửa chữa nó?

+1

có thể trùng lặp của [? Làm thế nào để giải quyết vấn đề với cảnh báo fileAttributesAtPath] (http://stackoverflow.com/questions/9019353/how-to- giải quyết-vấn đề-với-fileattributesatpath-cảnh báo) –

Trả lời

8

Trong hầu hết các trường hợp, khi bạn nhận được báo cáo về phương pháp không dùng nữa, bạn tra cứu trong tài liệu tham chiếu và nó sẽ cho bạn biết những gì thay thế để sử dụng.

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

Vì vậy, hãy sử dụng attributesOfItemAtPath:error: để thay thế.

Đây là cách đơn giản:

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

Cách hoàn chỉnh hơn là:

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

Chỉnh sửa: Trong trường hợp bạn không biết những gì phản phương tiện, nó có nghĩa là phương pháp hay lớp bây giờ đã lỗi thời. Bạn nên sử dụng API mới hơn để thực hiện một hành động tương tự.

+0

Bạn có thể xin vui lòng cho tôi một ví dụ làm thế nào để sử dụng attributesOfItemAtPath: lỗi: – DanM

+0

Nó hầu như giống với những gì bạn đang sử dụng. Bạn có thể truyền 'nil' cho tham số' error: 'để bắt đầu nhanh chóng. – rmaddy

+1

'attributesOfItemAtPath: error:' không hỗ trợ liên kết tượng trưng. Vì vậy, mã của bạn không có hành vi tương tự như 'traverseLink: YES' từ câu hỏi. –

1

Câu trả lời được chấp nhận quên xử lý traverseLink:YES từ câu hỏi.

Một câu trả lời cải thiện được sử dụng cả hai attributesOfItemAtPath:error:stringByResolvingSymlinksInPath:

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

Điều này tốt hơn nhiều so với câu trả lời được chấp nhận! –

Các vấn đề liên quan