2010-11-16 5 views
2

Je récupère la taille de tous les fichiers dans le répertoire du document. J'utilise la méthode attributesOfItemAtPath pour le faire. C'est réussi. Mais je reçois la sortie sous la forme d'octets et de classe NSNumber. Ça n'a pas l'air bien. Donc, j'ai besoin d'obtenir la sortie en KBs ou MBs et je dois les convertir en NSString afin de stocker cela dans un NSDictionary car je dois l'afficher dans un TableView. Aidez-moi s'il vous plaît à le faire. Je vous remercie.Octets to KiloBytes

Voici mon code ..

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

Je suis en utilisant le code suivant pour lier la taille en tableView qui ne fonctionne pas. Aidez-moi à convertir la taille d'un fichier d'un octet à KiloByte et à l'afficher dans une tableView. Nous vous remercions à l'avance ..

+2

Diviser par 1024? –

Répondre

5

Arrondi au plus proche KB:

NSNumber *fileSize = [[directoryContent objectAtIndex:listIndex] 
         objectForKey:@"fileSize"]; 
cell.lblSize.text = [NSString stringWithFormat: @"%d", 
        (int)round([fileSize doubleValue]/1024]); 
+0

Merci beaucoup .. Cela fonctionne .. – iOS

0

Pensez à utiliser NSNumber au lieu de NSString pour stocker des numéros dans un NSDictionary.

8

Vous pouvez utiliser ma sous-classe NSValueTransformer si vous aimez:

@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 
+0

C'est gentil! J'ajouterais un contrôle de gamme après la boucle while - juste au cas où vous seriez confronté à un fichier pétaoctet :) –

+0

Bon extrait! J'ai créé une catégorie pour NSString <3 –

+0

Remarque: Si vous ajoutez des localisations à votre application, les jetons ne sont pas toujours identiques. C'est à dire. MB est MO en français. – Daniel