UIImageView не показывает изображение
У меня есть следующий код:
@interface NeighborProfileViewController : UIViewController {
UIImageView * profPic;
UITextView * text;
UIButton * buzz;
NSString * uid;
NSMutableData *responseData;
NSDictionary * results;
}
@property (nonatomic, retain) IBOutlet UIImageView * profPic;
@property (nonatomic, retain) IBOutlet UITextView * text;
@property (nonatomic, retain) IBOutlet UIButton * buzz;
@property (nonatomic, retain) NSString * uid;
@end
Вот что я имею в viewDidLoad
в файле .m
@implementation NeighborProfileViewController
@synthesize uid;
@synthesize profPic;
@synthesize buzz;
@synthesize text;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = //some URL to the picture;
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [[[UIImage alloc] initWithData:data] autorelease];
self.profPic = [[UIImageView alloc] initWithImage: img];
}
Я думаю, что правильно подключил UIImageView
через IB
. У меня есть выход из UIImageView
в profPic в Владелец файлов. Что я делаю неправильно?
Ответы
Ответ 1
Если вы устанавливаете изображение по умолчанию, оно остается видимым после вызова self.profPic = [UIImageView]
или оно удаляется с экрана?
Я думаю, эта проблема возникает, когда self.profPic
выпускает старый образ изображения, чтобы заменить его тем, который вы только что создали. Старый экземпляр UIImageView
, наряду со всеми свойствами, которые вы определили в IB, вероятно, автоматически удаляется из супервизора. Вот почему вы не видите загруженное изображение.
Если вы использовали IB
для создания UIImageView
, вы не хотите создавать новый ImageView и назначать его profPic
(который уже полностью создан UIImageView
). Попробуйте вызвать [profPic setImage:img];
, который просто изменит изображение в образе profPic
.
Ответ 2
Использование @Equinox
[profPic setImage:img];
вместо
self.profPic = [[UIImageView alloc] initWithImage: img];
хотя использование autorelease здесь не является проблемой.
вы также можете сделать что-то вроде этого
UIImage *img = [[UIImage alloc] initWithData:data] ;
[profPic setImage:img];
[img release];
проблема с
self.profPic = [[UIImageView alloc] initWithImage: img];
заключается в том, что теперь вы создаете другое место памяти для profPic, и это означает, что profPic больше не будет указывать на UIImageView в вашей IB