J'ai une vue avec un scrollview. J'utilise du code pour ajouter des étiquettes à la scrollview. Comme il y a beaucoup de code redondant, j'ai essayé de déplacer la création de l'étiquette vers une fonction séparée qui retourne un UILabel. Ici 'cette fonction:Fonction iPhone pour créer UILabel échoue et se bloque
- (UILabel *) f_MakeLabelWithL:(float)MyLeft T:(float)MyTop W:(float)MyWidth H:(float)MyHeight Align:(UITextAlignment)MyAlign
Font:(UIFont *)MyFont TextColor:(UIColor *)MyTextColor BGColor:(UIColor *)MyBGColor {
CGRect rect = CGRectMake(MyLeft, MyTop, MyWidth, MyHeight);
UILabel *label = [[[UILabel alloc] initWithFrame:rect] autorelease];
label.adjustsFontSizeToFitWidth = YES;
label.backgroundColor = MyBGColor;
label.font = MyFont;
label.numberOfLines = 0;
label.textAlignment = MyAlign;
label.textColor = MyTextColor;
return label;
}
Je définis le texte de l'étiquette après son retour. Ou alors j'ai prévu. En fait, une étiquette dont l'arrière-plan est bleu apparaît sous la forme d'un rectangle noir uni. Un avec un fond clair est tout à fait clair. Pire encore: le scrollview ne défilera pas, et tenter de le faire le fera pour faire tomber l'application sans aucune explication dans la console du débogueur.
Pourtant, tout ce code fonctionne bien en ligne et dandy.
Quelqu'un sait pourquoi?
Mise à jour: La mise en ligne du code a permis de corriger l'affichage des étiquettes. Mais j'utilise aussi une fonction pour créer des images:
- (UIImageView *) f_MakeImageWithL:(float)MyLeft T:(float)MyTop W:(float)MyWidth H:(float)MyHeight File:(NSString *)MyFile {
CGRect rect = CGRectMake(MyLeft, MyTop, MyWidth, MyHeight);
UIImageView *oImageView = [[[UIImageView alloc] initWithFrame:rect] autorelease];
NSString *s = [[Isystant f_DocumentsPath] stringByAppendingPathComponent:MyFile];
UIImage *oImage = [UIImage imageWithContentsOfFile:s];
[oImageView setImage:oImage];
oImageView.backgroundColor = [UIColor redColor];
oImageView.opaque = YES; // explicitly opaque for performance
return oImageView;
}
Il a été crée les images, mais le problème de défilement/crash gelé ne disparaît pas jusqu'à ce que je mets ce code de retour aussi en ligne.
Exactement! J'ai oublié que lorsque je reçois un contrôle d'une fonction, je n'ai pas besoin de le relâcher. Ce que vous n'allouez pas init, vous ne le libérez pas! Mon indice aurait dû être le crash sans aucune explication dans la console du débogueur. Cela semble toujours se produire lorsque le problème est trop relâché. Infiniment reconnaissant. (Juste pour plus de clarté: ce qui fonctionne est de libérer le contrôle dans la fonction, mais pas de libérer la variable d'objet qui était le récepteur de la fonction.) –