2010-10-12 7 views
0

Salut Je suis nouveau sur iphone .. J'ai stocké les images dans le tableau. Je veux savoir comment afficher ces images dans UIImageView, où UIImageView doit être créé dynamiquement selon le nombre de fichiers augmente, dans la boucle. c'est le codecréation dynamique de uiimageview dans pour la boucle

NSArray *filelist; 
NSFileManager *filemgr; 
int count; 
int i=0; 
int t=0; 
filemgr = [NSFileManager defaultManager]; 
filelist = [filemgr directoryContentsAtPath: @"/Mypath/"]; 
NSMutableArray *imageVwArr = [[NSMutableArray alloc]init]; 
count = [filelist count]; 
count++; 
for(i = 0; i < count; i++)         
{ 
    UIImageView *imgVw = [[UIImageView alloc] initWithImage:[filelist objectAtIndex:i]]; 
    [imgVw setUserInteractionEnabled:YES]; 
    [imgVw setTag:i]; 
    imgVw.frame=CGRectMake(t, 0, 480, 320); 
    [imageVwArr addObject:imgVw]; 
    [self.view addSubview:imgVw]; 
    [imgVw release]; 
    t=t+480;   
} 

il montre l'erreur: appelé Mettre fin à une instance après avoir jeté du programme 'NSException' signal reçu: « SIGABRT ».

où je l'ai fait mal, je n'ai aucune idée sur la création dynamique UIImageView merci à l'avance ....

+0

Qu'est-ce qui ne va pas? – zem

Répondre

1
[filemgr directoryContentsAtPath: @"/Mypath/"]; 

Très probablement ce sera de retour nul. Parce que ce chemin n'existe pas. Vous n'avez pas accès au système de fichiers complet sur l'iphone.

Placez plutôt vos fichiers dans le répertoire des documents d'applications.

NSString *documentDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 

EDIT: Je viens d'essayer cela, et aucune exception est levée, de sorte que votre bug est un autre endroit.
EDIT2: Vous comptez incrémenter, pourquoi? En incrémentant, comptez votre for-loop essaye d'accéder à un objet qui n'est plus dans le tableau.

Si votre fileArray a 10 entrées, le nombre sera de 10. Ensuite, vous incrémenterez le nombre, donc comptera 11, mais votre tableau n'a encore que 10 entrées.
Votre boucle for débutera à l'index 0 (qui est votre premier nom de fichier) jusqu'à ce qu'elle accède à l'index 9 (qui est votre 10e nom de fichier) tout fonctionne.

Dans la prochaine boucle, il tente d'accéder au nom de fichier à l'index 10. Et cet index est hors limites.

EDIT3:

bug suivant: initWithImage: veut un UIImage, pas un nom de fichier. Utilisation:

NSString *fullPath = [yourImagePath stringByAppendingPathComponent:[filelist objectAtIndex:i]]; 
UIImage *image = [[[UIImage alloc] initWithContentsOfFile:fullPath] autorelease] 
UIImageView *imgVw = [[UIImageView alloc] initWithImage:image]; 

EDIT4: Peut-être que vous voulez créer votre imageViews que si pourrait être créé un UIImage de votre fichier. Donc, s'il arrive qu'il ya un fichier qui n'est pas une image valide, vous ne créez pas un imageview vide .:

if (!image) 
    continue; 
UIImageView *imgVw = [[UIImageView alloc] initWithImage:image]; 

EDIT5 & LAST: ma mise en œuvre d'un imageViewController. S'il vous plaît ne l'utilisez pas tel quel, essayez de le comprendre et d'apprendre quelque chose. C'est loin d'être parfait.

+0

k merci beaucoup en utilisant pour la boucle comment je crée plusieurs images vues quand je fais défiler l'imageview je veux voir toutes les images comment je reçois ... merci d'avance – Rajkumar

+0

il y a un fichier ".DS_Store" ils apparaîtront mais l'arraylist contenir ce fichier donc seulement j'augmente le nombre – Rajkumar

+0

votre forloop ne fait que cela, il crée plusieurs images. ajoutez-les à une vue et affichez cette vue dans un uiscrollview. –