Collection View - Bilder aus Documents Ordner

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Collection View - Bilder aus Documents Ordner

    Hi,

    ich bin quasi Quereinsteiger und war bisher eher der Java und C# - Typ, weswegen mir der Einstieg etwas schwer fiel... so langsam wird es aber glaube ich. :)

    Nun zu meinem Problem: Ich kriege seit Stunden einfach nicht hin, Bilder aus dem Documents-Ordner in einer Collection View anzuzeigen.

    Wenn ich die Bilder zuvor in Xcode (Also nicht im Documents-Ordner, sondern ganz einfach in eine Group) einfüge, zeigt er sie mir alle korrekt an. Dafür sieht der Code so aus:

    Quellcode

    1. arrayCollectionImages = [[NSArray alloc]initWithObjects: @"1.jpg", @"2.jpg", @"3.jpg", @"4.jpg", @"1.jpg", @"2.jpg", @"3.jpg", @"4.jpg", @"4.jpg", @"1.jpg", @"2.jpg", @"3.jpg", @"4.jpg", nil];


    Quellcode

    1. -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. APCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ReuseID" forIndexPath:indexPath];
    4. [[cell collectionImageView]setImage: [UIImage imageNamed:[arrayCollectionImages objectAtIndex:indexPath.item]]];
    5. return cell;
    6. }


    Mit Dateien aus dem Documents-Ordner geht es einfach nicht:

    Quellcode

    1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    2. NSString *documentsDirectory = [paths objectAtIndex:0];
    3. fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];


    Quellcode

    1. -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. APCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ReuseID" forIndexPath:indexPath];
    4. [[cell collectionImageView]setImage: [UIImage imageNamed:[fileList objectAtIndex:indexPath.item]]];
    5. return cell;
    6. }


    Wenn ich das fileList-Array ausgebe, erhalte ich auch die drei Dateien aus dem Documents-Ordner:
    2012-11-27 18:26:56.774 Test[22545:c07] My Image.png
    2012-11-27 18:26:56.775 Test[22545:c07] pkm.jpg
    2012-11-27 18:26:56.776 Test[22545:c07] test.jpg
    Statt den Bildern sehe ich nur einen schwarzen Bildschirm.

    Hoffe, dass mir jemand helfen kann. Danke!

    Gruß
  • Achso, verstehe was du meinst. Es wird alles gelesen, aber auch die .DS_Store Datei, außerdem scheint es so zu sein, dass die Methode öfters aufgerufen wird:

    Quellcode

    1. 2012-11-27 18:58:20.563 Test[24640:c07] .DS_Store
    2. 2012-11-27 18:58:20.564 Test[24640:c07] My Image.png
    3. 2012-11-27 18:58:20.565 Test[24640:c07] pkm.jpg
    4. 2012-11-27 18:58:20.565 Test[24640:c07] test.jpg
    5. 2012-11-27 18:58:20.573 Test[24640:c07] .DS_Store
    6. 2012-11-27 18:58:20.573 Test[24640:c07] My Image.png
    7. 2012-11-27 18:58:20.573 Test[24640:c07] pkm.jpg
    8. 2012-11-27 18:58:20.573 Test[24640:c07] test.jpg
    9. 2012-11-27 18:58:20.574 Test[24640:c07] .DS_Store
    10. 2012-11-27 18:58:20.575 Test[24640:c07] My Image.png
    11. 2012-11-27 18:58:20.575 Test[24640:c07] pkm.jpg
    12. 2012-11-27 18:58:20.575 Test[24640:c07] test.jpg
    13. 2012-11-27 18:58:20.576 Test[24640:c07] .DS_Store
    14. 2012-11-27 18:58:20.576 Test[24640:c07] My Image.png
    15. 2012-11-27 18:58:20.577 Test[24640:c07] pkm.jpg
    16. 2012-11-27 18:58:20.577 Test[24640:c07] test.jpg
    Alles anzeigen


    Ich überführe jetzt erstmal alle *.jpg- und *.png Dateien in ein weiteres Array... mal schauen.

    Ok, sieht leider nicht besser aus:

    Quellcode

    1. jpegFiles = [NSMutableArray arrayWithCapacity: [fileList count]];
    2. NSString *filename;
    3. for (filename in fileList)
    4. {
    5. if ([[filename pathExtension] isEqualToString:extension])
    6. {
    7. [jpegFiles addObject: filename];
    8. }
    9. }


    Quellcode

    1. -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    2. {
    3. for(int i = 0; i < [jpegFiles count]; i++){
    4. NSLog(jpegFiles[i]);
    5. }
    6. APCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ReuseID" forIndexPath:indexPath];
    7. [[cell collectionImageView]setImage: [UIImage imageNamed:[jpegFiles objectAtIndex:indexPath.item]]];
    8. return cell;
    9. }


    Ausgabe:

    Quellcode

    1. 2012-11-27 19:19:01.756 Test[26105:c07] pkm.jpg
    2. 2012-11-27 19:19:01.757 Test[26105:c07] test.jpg
    3. 2012-11-27 19:19:01.766 Test[26105:c07] pkm.jpg
    4. 2012-11-27 19:19:01.766 Test[26105:c07] test.jpg

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von alfie ()

  • Ich würde mal sagen das kann nicht gehen da Du ja nur den Filenamen hast aber den ganzen Pfadnamen brauchst.

    Gruß

    Claus

    P.S. Ich würde auch mal wetten das der Document Ordner nicht die richige Stelle für die Images ist. Da kommst du dann nicht mit durch den Review
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • alfie schrieb:

    Quellcode

    1. [[cell collectionImageView]setImage: [UIImage imageNamed:[jpegFiles objectAtIndex:indexPath.item]]];

    Wie Claus schon schrieb: Wenn Du imageNamed: benutzt, wird nur aus dem Bundle gelesen (dafür würde aber der reine Dateiname reichen). Wenn Du wie geschrieben aus dem Documents-Verzeichnis lesen möchtest, brauchst Du z. B. imageWithContentsOfFile:, dann aber auch den kompletten Pfad auf die Datei...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • matz schrieb:

    alfie schrieb:

    Quellcode

    1. [cell.imageView setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"bildURL"]]]];

    Vielen Dank Jungs. Habe mich von dem Gedanken verabschiedet, die Bilder aus dem Documents Ordner zu ziehen. Diese Lösung scheint mir ziemlich unperformant, denn wenn man von > 4 Bildern ausgeht. Die App startet nämlich erst, wenn die Bilder komplett geladen sind. Danach ruckelt es auch ziemlich. Habe mich etwas informiert. Nun lade die Bilder stattdessen asynchron runter, sodass sie sich nacheinander anzeigen.