Ios 切换视图控制器后添加标记
我有一个随机生成的int,分配给我的故事板上的UIImageView的标签 但是,当我切换到主菜单并再次尝试进入视图时,应用程序崩溃。我知道这是因为标签,因为当我移除它时,一切正常 你有没有想过为什么它第一次起作用,但之后就不起作用了?代码如下 ViewController.h:Ios 切换视图控制器后添加标记,ios,tags,segue,viewcontroller,Ios,Tags,Segue,Viewcontroller,我有一个随机生成的int,分配给我的故事板上的UIImageView的标签 但是,当我切换到主菜单并再次尝试进入视图时,应用程序崩溃。我知道这是因为标签,因为当我移除它时,一切正常 你有没有想过为什么它第一次起作用,但之后就不起作用了?代码如下 ViewController.h: @interface ViewController : UIViewController{ int tagnumber; IBOutlet UIImageView *box; ... } Vi
@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]插入零对象,但我将看看是否可以单独解决该问题。非常感谢!!