Изображение не устанавливается в методе - PullRequest
0 голосов
/ 10 мая 2011

У меня есть класс с методом viewDidLoad и методом artworkInfo следующим образом:

-(void)viewDidLoad {
    mainDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];   

    [super viewDidLoad];
}

-(void)artworkInfo:(NSNumber *)pos{
    mainDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];   

[self.image setImage:(UIImage *)[[mainDelegate.mapAnnotations objectAtIndex:0]image]];

}

Суть mainDelegate состоит в том, чтобы получить доступ к appDelegate, где хранится массив, но в любом случае с помощью команды «[self.image setImage ...]», где он находится, изображение в приложении не появляется, но когда я копирую эту точную строку кода в метод viewDidLoad, он появляется так, как должен. Я знаю, что метод artworkInfo вызывается, потому что я его отладил, и он проходит, поэтому я не могу понять, почему команда не будет делать ничего, что является ее текущим методом, в то время как она будет в viewDidLoad ...?

Кроме того, здесь вызывается метод, и это новое представление загружается из другого класса:

infoPage *info = [[infoPage alloc] initWithNibName:@"infoPage" bundle:nil];
    info.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:info animated:YES];
    infoPage *myInfoPage = [[infoPage alloc] init];
    [myInfoPage artworkInfo:position];
    [info release];

Ответы [ 3 ]

1 голос
/ 10 мая 2011

О, я вижу проблему. Вы создаете 2 разных infoPage класса.

Изменить это:

infoPage *info = [[infoPage alloc] initWithNibName:@"infoPage" bundle:nil];
info.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:info animated:YES];
infoPage *myInfoPage = [[infoPage alloc] init];
[myInfoPage artworkInfo:position];
[info release];

к этому:

infoPage *info = [[infoPage alloc] initWithNibName:@"infoPage" bundle:nil];
info.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:info animated:YES];
[info artworkInfo:position];
[info release];
1 голос
/ 10 мая 2011

ОК, подробный ответ.Чтобы понять, почему это изображение не отображается должным образом, вы должны сначала взглянуть на то, как Runloops работают в Objective C.

Хотя viewDidLoad - это метод, который вызывается при загрузке представления и технически также вызывается передпредставление отображается, и его объекты просмотра инициализированы.Так как presentModalViewController - это анимация, на самом деле в работах происходит несколько потоков.

viewDidLoad вызывается перед созданием анимации для presentModalView.Это инициализирует ваши объекты.Однако из-за некоторых внутренних функций UI Kit некоторые процессы загружаются в поток.По завершении они запускают методы обратного вызова в главном потоке пользовательского интерфейса.

Поскольку presentModalViewController является неблокирующим методом, ваш метод artworkInfo добавляется в mainRunLoop до того, как поток формы инициализатора добавляет свои методы обратного вызова в основной цикл выполнения.Наилучшим подходом было бы иметь свойство UIImage вашего viewController и UIImageView.

установить значение UIImage, вызвав artworkInfo ПЕРЕД методом presentModalViewController.

в вашем ViewDidLoad, продолжить и установитьзначение вашего UIImageView

[self.imageView setImage:self.image];

Проблема решена.

0 голосов
/ 10 мая 2011

Это кажется довольно простым.

Таким образом, вы инициализируете свое перо и пытаетесь вызвать иллюстрацию вашего метода до того, как перо будет полностью загружено.<- Это не работает для вас. </p>

Затем вы выполняете дополнительную инициализацию с помощью переопределения viewDidLoad для документа, в который загружен перо <- Это работает для вас </p>

Поэтому ответ, когда вы вызываете setImage до загрузки вашего пера, тогда нет ничего, чтобы установить изображение.Когда вы вызываете setImage в viewDidLoad, ваш кончик загружается, и тогда все должно работать просто отлично.

Надеюсь, это немного объясняет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...