我有一个CCScrollView
在用户点击按钮时打开。我还想“重新初始化”处理此CCScrollView
的UI元素的类。我这样做是通过将[CCBReader load:@"Shop"];
Shop
作为此CCScrollView
的自定义类来调用的。 Shop
设置CCScrollView
的所有标签和按钮。
打开CCScrollView
(位于MainScene
):
-(void)openShop
{
[CCBReader loadAsScene:@"Shop"];
CCScrollView *scroll = [[CCScrollView alloc]initWithContentNode:shopNode];
[shopNode setContentSizeInPoints:(CGSizeMake(320, 1000))];
[scrollContainer addChild:scroll z:0 name:@"scrollName"];
[scroll setContentSizeInPoints:(CGSizeMake(320.0, 370.0))];
[scroll setHorizontalScrollEnabled:NO];
[scroll setPosition:(CGPointMake(0, 70))];
}
Shop
的初始化方法:
-(id)init
{
if ([super init]) {
if (i == 0) {
cell1.string = @"hello";
i++;
} else {
cell1.string = @"ffff";
}
}
return self;
}
所以我想要做的是,当我第一次运行程序并且所有类都被初始化时,cell1
的字符串是“hello”,并且它向i添加1。然后,当我打开CCScrollView
时,Shop
应该再次初始化,因为我是1,cell
的字符串应该更改为“ffff”。问题是它没有更改cell1.
我可以放在显示随机文本的NSLog
的字符串,并且可以完美地运行,但cell1
的字符串不会更改。这是为什么?
答案 0 :(得分:0)
每次打开滚动视图时,都会创建一个新的Shop实例。此时将'i'值设置为1的前一个实例取消分配,因此每次重新开始时i为0。
快速解决方法是使i成为@interface之外的静态变量。我强烈建议重命名。
static int index = 0;
-(id)init
{
if ([super init]) {
if (index == 0) {
cell1.string = @"hello";
index++;
} else {
cell1.string = @"ffff";
}
}
return self;
}
更好的方法是将索引值存储在商店外部,并在创建时将其传递给商店实例。