ffl*_*dro 8 iphone objective-c
我有最奇怪的错误,我希望有人可以帮助我.这是我创建视图控制器并将其推送到navigationController时的代码.问题是将随机变量传递给新的视图控制器.我尝试在init方法中传递它,并使用下面注释的行传递它.
MultipleBet *multipleBet = [[MultipleBet alloc] initWithMaxNumber:numbers andMaxStars:stars andRandom:self.random];
NSLog(@"RANDOM1: %d", self.random);
//[multipleBet setRandom:self.random];
UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] init] autorelease];
backButton.title = @"Voltar";
self.navigationItem.backBarButtonItem = backButton;
[self.navigationController pushViewController:multipleBet animated:YES];
[multipleBet release];
Run Code Online (Sandbox Code Playgroud)
但是,当我在MultipleBet的viewDidLoad中访问随机变量时,它始终为FALSE.
这是MultipleBet的代码:
- (id)initWithMaxNumber:(int)maxNumbers andMaxStars:(int)maxStars andRandom:(BOOL)isRandom {
self = [super initWithNibName:@"MultipleBet" bundle:[NSBundle mainBundle]];
...
self.random = isRandom;
NSLog(@"RANDOM2: %d", self.random);
NSLog(@"RANDOM2.1: %d", isRandom);
return self;
}
Run Code Online (Sandbox Code Playgroud)
这是viewDidLoad的代码:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"RANDOM2.2: %d", self.random);
}
Run Code Online (Sandbox Code Playgroud)
我声明变量和属性,如下所示:
BOOL random;
@property (nonatomic) BOOL random;
Run Code Online (Sandbox Code Playgroud)
输出始终为:
RANDOM2.2:0
RANDOM2:1
RANDOM2.1:1
RANDOM1:1
为什么viewDidLoad中的NSLog会在所有其他之前输出?它应该是最后一个......可能是因为我的自定义init方法?我叫[super init],所以它应该不是问题...
Alt*_*ice 21
viewDidLoad和init*方法不能保证一个接一个地执行.init*方法中的代码可能导致视图加载,因此viewDidLoad即使init*方法尚未完成也会调用.
最有可能的是,您省略的部分中的某些代码会导致视图加载.如果您将向我们展示这一部分,也许我们可以指出它.或者,您也可以将该self.random = isRandom;行作为if (self)块内的第一行移动,看看是否有效.这样,在分配之后将执行导致视图加载的任何内容self.random.
- (id)initWithMaxNumber:(int)maxNumbers andMaxStars:(int)maxStars andRandom:(BOOL)isRandom {
self = [super initWithNibName:@"MultipleBet" bundle:[NSBundle mainBundle]];
if (self) {
// do this first
self.random = isRandom;
NSLog(@"RANDOM2: %d", self.random);
NSLog(@"RANDOM2.1: %d", isRandom);
// do the other code after
...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5451 次 |
| 最近记录: |