Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone ImageView和NSString变量在切换视图后重置_Iphone_Ios_Uiviewcontroller_Background_Uiimageview - Fatal编程技术网

Iphone ImageView和NSString变量在切换视图后重置

Iphone ImageView和NSString变量在切换视图后重置,iphone,ios,uiviewcontroller,background,uiimageview,Iphone,Ios,Uiviewcontroller,Background,Uiimageview,我正在设计一个iPhone程序,可以在一个视图中按下“自定义”圆形矩形按钮,显示不同的视图(我使用内置故事板上的模式连接在视图之间切换),从中可以自定义第一个视图上的背景。自定义屏幕(第二个屏幕)有多个按钮,用于选择使用以下代码的背景: ViewController.h: @interface{ ... IBOutlet UIImageView *backgroundImageTest; ... } ... @property (strong,nonatomic) NSString *b

我正在设计一个iPhone程序,可以在一个视图中按下“自定义”圆形矩形按钮,显示不同的视图(我使用内置故事板上的模式连接在视图之间切换),从中可以自定义第一个视图上的背景。自定义屏幕(第二个屏幕)有多个按钮,用于选择使用以下代码的背景:

ViewController.h:

@interface{
...
IBOutlet UIImageView *backgroundImageTest;

...

}

...

@property (strong,nonatomic) NSString *backgroundImageName;

@property (retain, nonatomic) IBOutlet UIImageView *backgroundImageTest;

...
- (IBAction)setJungleBackground:(id)sender {

backgroundImageName=@"jungle.png";

backgroundImageTest.image=[UIImage imageNamed:@"jungle.png"];
}

- (IBAction)setArcticBackground:(id)sender {

backgroundImageName=@"arctic.png";

backgroundImageTest.image=[UIImage imageNamed:@"arctic.png"];
}
ViewController.m:

@interface{
...
IBOutlet UIImageView *backgroundImageTest;

...

}

...

@property (strong,nonatomic) NSString *backgroundImageName;

@property (retain, nonatomic) IBOutlet UIImageView *backgroundImageTest;

...
- (IBAction)setJungleBackground:(id)sender {

backgroundImageName=@"jungle.png";

backgroundImageTest.image=[UIImage imageNamed:@"jungle.png"];
}

- (IBAction)setArcticBackground:(id)sender {

backgroundImageName=@"arctic.png";

backgroundImageTest.image=[UIImage imageNamed:@"arctic.png"];
}
对于每个可能的背景

同样在ViewController.m中:

- (void)viewDidLoad
{

if(!notFirstTime){

    notFirstTime=YES;

    ...

    backgroundImageName=@"white.png";

}

...

backgroundImageTest.image=[UIImage imageNamed:backgroundImageName];

...

[super viewDidLoad];

}
每次切换视图时,第一次布尔值将重置为“否”,背景将保持默认背景(@“white.png”)。如果我将@“white.png”替换为@“jungle.png”,背景可以工作,但不能切换到任何其他背景

两个视图都使用一个ViewController。到目前为止,除了这个小问题,它似乎工作得很好。我应该使用多个视图控制器吗?我不知道在什么情况下我应该这样做

此外,我不确定是否应该在变量的属性声明中使用retain或strong

我对iPhone编程比较陌生,任何建议都非常感谢

谢谢,
Alex

在视图控制器实例化后调用viewDidLoad-看起来您正在不断地重新创建视图控制器实例。避免这种情况,然后使用ViewDidDisplay。

听起来不错-如何避免创建视图控制器的多个副本,viewDidLoad和ViewDidDisplay之间有什么区别?我刚开始iPhone编程,坦率地说,我不知道ViewController在哪里实例化。@Alekxos它是在您调用
[[MyViewController alloc]init…]时实例化的。
。我已经解释了viewDidLoad的功能——看看苹果的文档。我将viewDidLoad代码移到了ViewDidDisplay,但没有任何改变。该错误是否可能是由于对两个视图使用一个控制器引起的?我不确定控制器如何知道viewDidLoad或ViewDidDisplay是哪个视图的意思。@Alekxos正如我所说,移动代码本身是不够的-您应该确保视图控制器的创建不会发生多次,只发生一次。我该怎么做?我在AppDelegate中搜索了[[MyViewController alloc]init…],但它不在那里-它会在其他地方吗?如果有关系的话,我用的是ARC。