我有一个带有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方法中时,它会显示出它应该的样子。我知道artsInfo方法正在调用,因为我调试了它并且它通过了,所以我无法弄清楚为什么命令不会做任何事情它是当前的方法,而它将在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];
答案 0 :(得分:1)
OH,我看到了问题。您正在实例化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 :(得分:1)
好的答案。为了理解为什么这个图像没有正确显示,你必须首先看看Runloops如何在Objective C中工作。
虽然viewDidLoad是加载视图时调用的方法,但在技术上也是在显示视图之前调用它并且它的视图对象已初始化。由于presentModalViewController是一个动画,实际上有一些线程在进行中。
在为presentModalView创建动画之前调用viewDidLoad。这会初始化您的对象。但是,由于UI Kit的一些内部工作原理,一些进程被加载到一个线程中。完成后,它们在主UI线程上运行回调方法。
由于presentModalViewController是一种非阻塞方法,因此在初始化程序表单线程将其回调方法添加到主运行循环之前,您的artworkInfo方法会被添加到mainRunLoop。最好的方法是同时拥有viewController的UIImage属性和UIImageView。
通过在presentModalViewController方法之前调用artworkInfo来设置UIImage的值。
在ViewDidLoad中继续并设置UIImageView的值
[self.imageView setImage:self.image];
问题解决了。
答案 2 :(得分:0)
这看起来非常简单。
所以你初始化你的笔尖并尝试在笔尖完全加载之前调用你的方法图稿。 < - 这不适合你。
然后你根据装载nib的doco覆盖viewDidLoad进行额外的初始化< - 这对你有用
所以答案是,当你在加载nib之前调用setImage时,没有什么可以将图像设置为。当您在viewDidLoad中调用setImage时,您的nib被加载,然后事情就可以正常工作了。
我希望这能解释一下。