代码之家  ›  专栏  ›  技术社区  ›  iOS

字节到千字节

  •  2
  • iOS  · 技术社区  · 14 年前

    我正在检索文档目录中所有文件的大小。我用的是这个方法 attributesOfItemAtPath 这样做。它是成功的。但是我得到的输出是字节和类的形式 NSNumber . 看起来不太好。

    所以,我需要得到以kbs或mbs为单位的输出,我必须将它们转换为 NSString 为了把它储存在 NSDictionary 因为我必须在表格视图中显示它。请帮我这么做。谢谢您。

    这是我的密码……

    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"];
    

    帮助我将文件大小从字节转换为千字节,并在TableView中显示。 提前谢谢你……

    3 回复  |  直到 14 年前
        1
  •  5
  •   Daniel Dickison    14 年前

    四舍五入到最接近的KB:

    NSNumber *fileSize = [[directoryContent objectAtIndex:listIndex]
                          objectForKey:@"fileSize"];
    cell.lblSize.text = [NSString stringWithFormat: @"%d",
                         (int)round([fileSize doubleValue] / 1024]);
    
        2
  •  8
  •   diederikh    14 年前

    如果您愿意,可以使用我的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
    
        3
  •  0
  •   Alex Reynolds    14 年前

    考虑使用 NSNumber 而不是 NSString 将数字存储在 NSDictionary .