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