我正在检索文档目录中所有文件的大小。我使用方法attributesOfItemAtPath
来执行此操作。它很成功。但我得到的是字节和类NSNumber
形式的输出。它看起来不太好。
所以,我需要以KB或MB的形式获取输出,我必须将它们转换为NSString
,以便将其存储在NSDictionary
中,因为我必须在TableView中显示它。请帮我这样做。谢谢。
这是我的代码..
directoryContent = [[NSMutableArray alloc] init];
for (NSString *path in paths){
filesDictionary =[[NSMutableDictionary alloc] init];
filesSize = [[NSNumber alloc] init];
filesSize = [filesDictionary objectForKey:NSFileSize];
filesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:filesSize, @"filesSize", nil];
[directoryContent addObject:[filesDictionary copy]];
}
我正在使用以下代码绑定tableView中无法正常工作的大小。
cell.lblSize.text = (NSString *) [[directoryContent objectAtIndex:listIndex] objectForKey:@"filesSize"];
帮我将文件大小从byte转换为KiloByte并将其显示在tableView中。 提前谢谢..
答案 0 :(得分:8)
如果您愿意,可以使用我的NSValueTransformer子类:
@interface FileSizeTransformer : NSValueTransformer {
}
+ (Class)transformedValueClass;
+ (BOOL)allowsReverseTransformation;
- (id)transformedValue:(id)value;
@end
@implementation FileSizeTransformer
+ (Class)transformedValueClass;
{
return [NSString class];
}
+ (BOOL)allowsReverseTransformation;
{
return NO;
}
- (id)transformedValue:(id)value;
{
if (![value isKindOfClass:[NSNumber class]])
return nil;
double convertedValue = [value doubleValue];
int multiplyFactor = 0;
NSArray *tokens = [NSArray arrayWithObjects:@"B",@"KB",@"MB",@"GB",@"TB",nil];
while (convertedValue > 1024) {
convertedValue /= 1024;
multiplyFactor++;
}
return [NSString stringWithFormat:@"%4.2f %@",convertedValue, [tokens objectAtIndex:multiplyFactor],value];
}
@end
答案 1 :(得分:5)
舍入到最近的KB:
NSNumber *fileSize = [[directoryContent objectAtIndex:listIndex]
objectForKey:@"fileSize"];
cell.lblSize.text = [NSString stringWithFormat: @"%d",
(int)round([fileSize doubleValue] / 1024]);
答案 2 :(得分:0)
考虑使用NSNumber
代替NSString
在NSDictionary
中存储数字。