Ios 切换视图控制器后添加标记

Ios 切换视图控制器后添加标记,ios,tags,segue,viewcontroller,Ios,Tags,Segue,Viewcontroller,我有一个随机生成的int,分配给我的故事板上的UIImageView的标签 但是,当我切换到主菜单并再次尝试进入视图时,应用程序崩溃。我知道这是因为标签,因为当我移除它时,一切正常 你有没有想过为什么它第一次起作用,但之后就不起作用了?代码如下 ViewController.h: @interface ViewController : UIViewController{ int tagnumber; IBOutlet UIImageView *box; ... } Vi

我有一个随机生成的int,分配给我的故事板上的UIImageView的标签

但是,当我切换到主菜单并再次尝试进入视图时,应用程序崩溃。我知道这是因为标签,因为当我移除它时,一切正常

你有没有想过为什么它第一次起作用,但之后就不起作用了?代码如下

ViewController.h:

@interface ViewController : UIViewController{
    int tagnumber;
    IBOutlet UIImageView *box;
    ...
}
ViewController.m:

-(void)viewWillAppear:(BOOL)animated{
    tagnumber = arc4random()%1000;
    box.tag = tagnumber;
    ...
}

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
    [_animator removeAllBehaviors];
    [box removeFromSuperview];
}
main menu.m:

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {
}

基本上,当视图消失且系统内存不足时,它将调用UIViewController的
didReceiveMemoryWarning
实现。这里有一个奇妙的描述:


当您创建一个IBOutput时,您应该有一个指向它的弱指针,说
@property(弱,非原子)IBOutlet UIImageView*box
。视图保留其子视图,因此,如果视图被解除分配,其子视图保留计数将减少1。当视图消失时,系统将决定何时释放self.view,当它消失时,它将自动释放box,box也将被释放。您真的不必担心它。

尝试删除
[box removeFromSuperview]不幸的是,这不起作用。值得注意的是,我使用的UIdynamics动画师在长方体上具有重力,第二次使用时收到的错误消息是长方体不再是视图的后代。不过,第一次就可以了。我的回复太长,无法发表评论,所以我会把它放在一个答案下面:)啊,这太有用了。非常感谢你!!我觉得这将解决我的问题,但我还有最后一个问题——我应该在哪里添加代码的属性行?当我将其添加到.h中时,它给出了错误“非法可见性规范”。当我在接口后的.m中添加它时,引用框的每一行都有一个错误“memberreferencebase-type”int(WINDOW*,chtype,chtype)'不是结构或联合…不必担心!我将其添加到.h中接口的右括号下,所有错误都消失了。在编译并转到视图控制器时,我收到另一条错误消息,表示它试图从对象[0]插入零对象,但我将看看是否可以单独解决该问题。非常感谢!!