Objective c 赢得';将其从superview中删除时不会消失

Objective c 赢得';将其从superview中删除时不会消失,objective-c,uiviewcontroller,ios5,imagenamed,Objective C,Uiviewcontroller,Ios5,Imagenamed,在iOS5下,我会遇到以下问题:每次在应用程序中选择新产品时,控制器上都会调用以下代码。它在控制器视图中显示功能的项目符号列表 每个项目符号都是添加在正确位置(对应文本前面)的图像 现在的问题是,有时,显然是随机的,一些项目符号没有从以前的项目符号列表中删除,尽管我在方法开始时将其从superview中删除 - (void) loadProduct{ for (UIView * bullet in bullets){ bullet.hidden = YES;

在iOS5下,我会遇到以下问题:每次在应用程序中选择新产品时,控制器上都会调用以下代码。它在控制器视图中显示功能的项目符号列表

每个项目符号都是添加在正确位置(对应文本前面)的图像

现在的问题是,有时,显然是随机的,一些项目符号没有从以前的项目符号列表中删除,尽管我在方法开始时将其从superview中删除

  - (void) loadProduct{
    for (UIView * bullet in bullets){
        bullet.hidden = YES;
        [bullet removeFromSuperview];
    }
    [bullets removeAllObjects];
    [self.view setNeedsDisplay];


   ......here some stuff ......


    for (int i=0;i< numberOfFeatures;i++)
    {   

            UIImageView * bullet = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"bullet.png"]];
            bullet.frame =CGRectMake(someFloatValue ,
                                     someOtherFloatValue,
                                     6,
                                     6);
            [self.view addSubview:bullet];

            [bullets addObject:bullet];
            [bullet release];

        }
    }
-(无效)loadProduct{
用于(UIView*项目符号中的项目符号){
bullet.hidden=是;
[项目符号从SuperView中移除];
}
[子弹移除所有物体];
[self.view setNeedsDisplay];
……这里有些东西。。。。。。
对于(int i=0;i
项目符号
是NSMutableArray,是控制器的一个属性


我做错什么了吗

项目符号中
似乎只存储标签:

[bullets addObject:label];
因此,当从
项目符号
中删除所有内容时,您只需从superview中删除标签,项目符号(
UIImageView
控件)就保留在那里


如果您创建一个自定义控件(同时包含项目符号和标签的视图)并使用它们,可能会更容易

我最初发布的代码是完全正确的,但这只是我在简化代码时犯的一个错误。这个错误不在原始代码中,我从这里的代码中编辑了它。我明白了,现在一切都正常了。您是否正在从任何其他位置移除
项目符号中的对象?另一个可能的问题可能是竞态条件(只有当您从多个线程访问
项目符号时才会出现这种情况)。非常感谢您对竞态条件的评论!我只是在方法中放置了一个断点,在某些情况下,它似乎几乎同时被调用了两次。这可能就是原因。谢谢。也就是说,我将删除这个问题,因为它没有多大意义。您的代码似乎很好。子弹的所有物体都将被移除。当你看到一些子弹没有被移除时,是在阵列中还是在显示器中?多亏了babbidi,他向我暗示了比赛条件,我发现了错误:该方法几乎同时被调用了两次。