【问题标题】:Adding tag after switching view controllers切换视图控制器后添加标签
【发布时间】:2015-01-30 19:01:33
【问题描述】:

我有一个随机生成的 int,我将它分配给我在 ViewWillAppear 中的故事板上的 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];
}

MainMenu.m:

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

【问题讨论】:

  • 尝试删除[box removeFromSuperview];
  • 不幸的是,这不起作用。值得注意的是,我在盒子上使用了带有重力的 UIdynamics 动画器,而我第二次使用它时收到的错误消息是盒子不再是视图的后代。然而,它第一次运行良好。
  • 我的回复太长,无法发表评论,所以我会把它放在答案下面:)

标签: ios tags segue viewcontroller


【解决方案1】:

基本上,当视图消失且系统内存不足时,它会调用 UIViewController 的 didReceiveMemoryWarning 实现。这里有一个很棒的描述:ViewWillDisappear versus dealloc

当您创建 IBOutput 时,您应该通过说 @property (weak, nonatomic) IBOutlet UIImageView *box 来真正拥有指向它的弱指针。视图保留了它们的子视图,因此,如果一个视图被释放,它的子视图保留计数减一。当视图消失时,系统会决定何时释放 self.view,当它释放时,它会自动释放 box,box 也会被释放。你真的不需要担心它。

【讨论】:

  • 啊,这真是太有帮助了。非常感谢!!我觉得这会解决我的问题,但我还有最后一个问题——我应该在哪里添加该属性的代码行?当我在 .h 中添加它时,它会给出错误“非法可见性规范”。当我在接口之后的.m中添加它时,引用框的每一行都有一个错误“成员引用基类型'int(WINDOW *,chtype,chtype)'不是结构或联合......
  • 没关系!我将它添加到 .h 中接口的右括号下方,所有错误都消失了。我在编译并转到视图控制器时收到另一条错误消息,说它试图从 objects[0] 插入 nil 对象,但我会看看我是否可以单独解决这个问题。非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多