2010-04-06 4 views
0

UIImageView * one = [[UIImageView alloc] initWithImage: [[UIImage alloc]] initWithContentsOfFile: [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @ "ball1.png"]]];Ajout d'une image dans UIPickerView

UIImageView *two = [[UIImageView alloc]initWithImage:[[UIImage alloc] initWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ball2.png"]]] ; 
UIImageView *three = [[UIImageView alloc]initWithImage:[[UIImage alloc] initWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ball3.png"]]] ; 

arrayBalls = [[NSArray alloc]initWithObjects:one,two,three,nil]; 

J'ai utilisé le code ci-dessus pour afficher l'image dans le UIPickerView. Mais l'application plante lors de l'exécution de ce code.

Quelqu'un s'il vous plaît aider.

Répondre

0

Quelles erreurs Consommez-vous, jetez un oeil à la trace de la pile, ect ...

Sans cette information, il est difficile de diagnostiquer votre problème, mais il semble que votre code est pleine de fuites. Ma conjecture est que vous ne suivez pas les techniques de gestion de la mémoire et ne libérez pas les choses correctement. De plus, il est un moyen plus facile de faire ce que vous essayez de faire:

UIImageView *one = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ball1.png"]] 
... 
NSArray* ballsArray = [NSArray arrayWithObjects:one,two,three,nil]; 
[one release]; 
[two release]; 
[three release]; 

Assurez-vous d'ajouter les images à votre projet (clic droit> ajouter> ajouter des fichiers existants)

Découvrez la conférence CS139P sur la gestion de la mémoire.

W.R.T. Votre commentaire: Le type d'erreur que vous obtenez se produit lorsque vous n'avez pas conservé correctement un objet, puis essayez de lui envoyer un message.

Vous êtes code ressemble probablement quelque chose comme ça

@interface SomeObject : NSObject{ 
    NSString* aString; 
} 

@implementation SomeObject 

-(void)someMethod{ 
    aString = [NSString stringWithString:@"A String"]; 
    ... 
} 
-(void)someOtherMethod{ 
    [aString isEqualToString:@"A String"]; 
    ... 
} 

Si vous ne comprenez pas pourquoi cela ne fonctionne pas, vous avez vraiment besoin de revenir en arrière et revoir la façon dont fonctionne la gestion de la mémoire avec l'iPhone.

S'il vous plaît télécharger et écouter le CS193P Lecture sur la gestion de la mémoire à partir d'iTunes U, il m'a aidé, il vous aidera.

+0

j'ai eu l'erreur suivante s'il vous plaît aider *** en raison de l'application Mettre fin exception uncaught 'NSInvalidArgumentException', raison: '*** - [UIImageView isEqualToString:]: sélecteur non reconnu envoyé à l'instance 0x4a21df0' – isarathg

0

J'ai eu le même problème à propos de pickerView que vous et moi l'avons corrigé. Tout d'abord, vous essayez d'ajouter les images à la vue du sélecteur et vous devez remplacer la méthode déléguée de la vue du sélecteur.

Je suppose que vous avez utilisé la méthode déléguée suivante pour obtenir les images de la vue Préparateur:

(NSString *)pickerView: (UIPickerView *)pickerView titleForRow: (NSInteger)row forComponent (NSInteger)component 

S'il vous plaît Notez que la fonction ci-dessus renvoie NSString, mais votre point de vue du sélecteur doit retourner UIImageView. Par conséquent, Xcode notifiera une erreur ambiguë: - [UIImageView isEqualToString:]: sélecteur non reconnu envoyé à l'instance 0x4a21df0 '(UIImageView n'est pas égal à NSString)

La solution est que vous devez utiliser une autre méthode déléguée de la vue du sélecteur:

(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 

Le problème est résolu! Si votre situation n'est pas la même que celle de moi, veuillez clarifier votre problème plus en détail. ^^