2012-03-30 13 views
0

Welche ist besser zur Laufzeit: 1) Speichern von Bildern der Größe 250X120 in sqlite. 2) Speichern von Bildern derselben Größe im Dokumentenverzeichnis. Bei zwei drei Orten App benötigt diese gespeicherten Bilder in der Steuerung angezeigt werden. Auch ich habe Anforderung, maximal 20 Bilder zu zeigen.Bilder zur Laufzeit in iPhone App speichern

Antwort

1

Die zweite Option ist viel besser als die erste. Um das zu erreichen Nutzung zweiten Teil:

- (void)saveImage:(UIImage*)image:(NSString*)imageName 
{ 
    NSData *imageData = UIImagePNGRepresentation(image); //convert image into .png format. 

    NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it 

    NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory 

    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]]; //add our image to the path 

    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the path (image) 

    NSLog(@"image saved"); 
} 
+0

Dank ... ich weiß die Umsetzung .... :) – adi27

1

+1 M.Sharjeel - und was verwenden wir in der Regel ein semi-Hybrid, wo wir ein Core Data Objekt haben werden (unterstützt von SQLite auf dem Handy/pad), die Enthält Metadaten zu der Datei, die schnell durchsucht werden soll, und speichern dann einen NSString für den Pfad im documentsDirectory.

+0

ihm zustimmen .. Kerndaten ist effizient und eine bessere Leistung als SQLite –

0

Wenn Sie die Dokumente Verzeichnis Ansatz nehmen, ist dies ein guter Weg, um es zu erreichen.

-(void) saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath { 
    if ([[extension lowercaseString] isEqualToString:@"png"]) { 
     [UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]] options:NSAtomicWrite error:nil]; 
    } else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) { 
     [UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil]; 
    } else { 
     ALog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension); 
    } 
} 

ein Bild zu speichern, tun Sie es einfach so:

NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
[self saveImage:yourImage withFileName:@"Your Image Name" ofType:@"png" inDirectory:path]; 

das Bild zu laden, implementieren diese Methode:

-(UIImage *) loadImage:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath { 

    UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, extension]]; 

    return result; 
} 

Und dann ist es wie folgt verwenden:

NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
yourImage.image = [self loadImage:@"Your Image Name" ofType:@"png" inDirectory:path]; 

Oder Sie könnten einfach einstellen Ihr Bild gleich, was diese Methode liefert stattdessen eine Methode zum Erstellen:

NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
yourImage.image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/Your Image Name.png", path]]; 
Verwandte Themen