Images laden aus Document-Ordner

  • Images laden aus Document-Ordner

    Hallo Leute,




    ich habe mal wieder ein Problem, bei dem ich auf eure Hilfe hoffe. Also folgendes: Ich lade über eine URL ein Bild und speichere dieses auf das iPod/iPad in das Dokuments-Verzeichnis der App.

    Wenn ich auf dieses Bild jetzt zugreifen möchte geht dies nicht, wie bei Bilder die im Mainbundle von begin an liegen via [UIImage imageNamed:@"Bild.png"]. Was geht ist [UIImage imageWithContentsOfFile: documentsPath].

    Das würde für meine App aber bedeuten, dass ich erst via imageNamed und wenn dann kein Bild erzeugt wird (null) nochmals via imageWithContentsOfFile probieren, da sowohl Bilder aus dem Bundle (Standard) als auch dem documents-Ordner (geladene) Bilder angezeigt werden sollen.




    Deswegen meine Frage: Gibt es eine Möglichkeit, das ich bei der Erzeugung eines Bildes auf beides zugreifen kann also Bunde+Documents-Ordner oder muss ich den komplizierten Weg gehen, beides anzufragen, um zu wissen was ich nehmen muss. Ich habe zwar an mehreren Stellen im web gefunden das es über imageNamed:@"Bild.png" gehen müsste, bei mir funktioniert das aber nicht, ka warum. Deshalb hier auch nochmals mein Quellende mit beiden Varianten, wofür ich gerne eine hätte.

    Genauer ist also die Frage, über welche Wege ich alles auf den Documents-Ordner zugreifen kann, welche auch die Bilder im Bundle einschließen?

    Quellcode

    1. id path = @"http://192.168.1.1/images/Penguins.png";
    2. NSURL *url = [NSURL URLWithString:path];
    3. NSData *data = [NSData dataWithContentsOfURL:url];
    4. NSString* savePath = [[NSString alloc] initWithFormat:@"%@/Documents/Penguins.png",NSHomeDirectory()];
    5. if ([data writeToFile:savePath atomically:YES]){NSLog(@"Saved");}
    6. else {NSLog(@"not saved");}
    7. UIImage *img = [UIImage imageWithContentsOfFile:savePath]; //Version 1, geht auch für Documents-Ordner
    8. UIImage *img = [UIImage imageNamed:@"Penguins.png"]; //Version 2, geht nicht für die geladen/gespeicherte Bilder im Documents-Ordner des Apps, nur für Bundle
    9. UIImageView* imgView = [[UIImageView alloc] initWithImage:img];
    10. imgView.frame = CGRectMake(100,100,100,100); // x=10 y=10 in original Bildgröße
    11. [self.view addSubview:imgView];
    Alles anzeigen



    Lieben Dank im Vorraus
    Uwoan
  • Documents Verzeichnis und der MainBundle Ordner sind komplett unterschiedliche Pfade.
    Natürlich musst du das händisch machen.

    Woher soll das Gerät denn wissen an welchen Stellen du überall suchen willst?
    /Library ist ja z.B. auch noch ein da, Unterverzeichnisse kann man in Library oder Documents auch erstellen.

    Du kannst dir aber z.B. eine UIImage Kategorie schreiben die das Laden übernimmt, oder (da es ja eher etwas andwendungsspezifisches ist) eine Art FileController der solche Methoden verinnerlicht.
    Hier dann in der gewünschten Reihenfolge die Pfade abklappert.
    Hierbei noch beachten, dass imageWithContentsOfFile nicht automatisch @2x für Retina Bilder im Dateinamen einträgt.
    Wenn der Screen-scale also 2.0 ist, solltest du zuerst nach Retina Bildern suchen, dann auf Normalauflösung zurückfallen wenn nichts gefunden wurde.