У меня есть UIScrollViewController, который имеет UIScrollView, который содержит UIImageView внутри.
В loadView контроллера представления прокрутки я загружаю изображение, вызывая функцию, которая должна выполнять загрузку в другом потоке. Я вызываю эту функцию из своего loadView, а затем помещаю viewview в scrollview и устанавливаю scrollview как представление контроллера.
Проблема в том, что я не вижу изображение, когда запускаю программу после щелчка по строке в табличном представлении (которое должно выдвигать представление прокрутки с изображением в нем). Однако, если я изменю tabss (в tabbarviewcontroller) и вернусь к этой вкладке. Изображение покажет.
Так что я думаю, что загрузка изображения происходит, но у меня почему-то возникает проблема с отображением его на экране. Это появляется только после того, как я вернусь к нему. Что я делаю не так? Я новичок в темах, поэтому я подозреваю, что это проблема с этим. Кроме того, мой код работал до того, как я его сделал, чтобы он мог выполнять загрузку в другом потоке, поэтому я почти уверен, что это связано с этим.
Это функция в Photo.m, которая является сущностью в базовых данных. Это должно сделать загрузку
- (void)processImageDataWithBlock:(void (^)(NSData *imageData))processImage {
NSString *url = self.imageURL;
dispatch_queue_t callerQueue = dispatch_get_current_queue();
dispatch_queue_t downloadQueue = dispatch_queue_create("Flickr download", NULL);
dispatch_async(downloadQueue, ^{
NSData *imageData = [FlickrFetcher imageDataForPhotoWithURLString:url];
dispatch_async(callerQueue, ^{
processImage(imageData);
});
});
}
Это мой метод loadView в PhotoScrollViewController.m
- (void)loadView {
[image processImageDataWithBlock:^(NSData *imageData) {
UIImage *imageToBeShown = [UIImage imageWithData:imageData];
imageView = [[UIImageView alloc] initWithImage:imageToBeShown];
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
scrollView = [[UIScrollView alloc] initWithFrame:applicationFrame];
scrollView.delegate = self;
scrollView.contentSize = imageToBeShown.size;
[scrollView addSubview:imageView];
self.title = image.title;
self.view = scrollView;
}];
}
Отредактировано для добавления дополнительной информации, добавленной в качестве ответа
Добавление [super loadView] в мой метод loadView решило проблему. Однако в документации сказано, что я не должен вызывать super loadView из моего loadView.
Я попытался переместить код в viewDidLoad, и это тоже работает. Но на самом деле это код, который устанавливает представление, поэтому я чувствую, что должен поместить его в loadView. Но тогда это не работает, когда я использую этот многопоточный механизм для загрузки.
Это потому, что загрузка каким-то образом мешает мне настроить представление в loadView?