【问题标题】:removeFromSuperView is not working in iPad2 with iOS5removeFromSuperView 在带有 iOS 5 的 iPad 2 中不起作用
【发布时间】:2012-01-25 06:17:30
【问题描述】:

removeFromSuperView 给我带来了一个小问题,因为它至少不能在 iOS 5 上使用 iPad2。我在表格填充数据之前显示自定义 UIView 警报,一旦完成,我会将其从超级列表中删除看法。除了 iPad2 (iOS5) 之外,其他所有设备都可以正常工作。我错过了什么吗?

.h

@private
    SaveUIDisplayViewController *wbsSummaryLoadView;

.m

// Displaying

wbsSummaryLoadView = [[SaveUIDisplayViewController alloc] initWithNibName:@"SaveUIDisplayViewController" bundle:nil];
[[wbsSummaryLoadView view] setFrame:[self view].bounds];
[wbsSummaryLoadView setupSavingViewWithTitle:NSLocalizedString(@"Loading...", @"")];
[[self view] addSubview:wbsSummaryLoadView.view];

// Removing 

[wbsSummaryLoadView.view removeFromSuperview];
[wbsSummaryLoadView release];
wbsSummaryLoadView = nil;

【问题讨论】:

  • 你确定其他地方没有问题吗?您尝试过什么调试 - 断点,单步执行代码,检查 nil 对象?可能是其他失败的东西。您是否检查了 SDK 以了解 iOS4 和 5 之间的更改?如果您确定 removeFromSuperview(我假设您的大写 V 是错字?)不起作用,那么您应该向 Apple 提交报告。但我怀疑它可能是其他地方。也许如果您发布了一些代码,有人可能会发现它?
  • @NickBull:我已经做了你提到的所有可能的方法,甚至检查了 SDK 的变化。好吧,也许我可以在这里添加一些代码,并对那个拼写错误感到抱歉。
  • 已更新代码。当它在 iPad(iOS5 以及更早版本) 上工作时,iPad2(iOS5) 有这个问题,但在 iPad2 的早期版本中工作。
  • 你发布的所有代码是用同一个方法,还是用两种不同的方法?
  • 它们当然是两种不同的方法。

标签: iphone objective-c uiview ios5


【解决方案1】:

添加视图后,您可以立即释放它。 (正在使用 addSubview 创建副本) 试试:

[[自我视图] addSubview:wbsSummaryLoadView.view]; [wbsSummaryLoadView 发布];

然后你就不需要关心了,因为如果你释放整个视图,你也会释放添加的视图。

【讨论】:

  • 除非你想在代码的其他地方再次控制 wbsSummaryLoadView 并且你已经将它声明为成员变量
【解决方案2】:

您正在存储两个不同的对象。当您创建 SaveUIDisplayViewController 时,您将在该方法中声明一个新实例。当您删除它时,您正在使用(我猜)成员变量。

SaveUIDisplayViewController *wbsSummaryLoadView = [[SaveUIDisplayViewController alloc] initWithNibName:@"SaveUIDisplayViewController" bundle:nil];

这将隐藏您在对象标头中定义的任何 wbsSummaryLoadView 声明。

当你来删除它时

[wbsSummaryLoadView.view removeFromSuperview];

必须在某处声明 wbsSummaryLoadView (这是我猜的,因为你还没有发布你的 .h 文件)如果这是在标题中声明的,那么它与你时的不同创建它(实际上此时它可能是nil

【讨论】:

  • 尼克:不,这是一个单一的 iVar(私人)。只是为了在这里展示,我创建了 SaveUIDisplayViewController 的本地变量。
  • 我已在头文件中将 wbsSummaryLoadView 声明为私有 ivar。请不要与本地 var 混淆,这只是为了表明它是什么类型的 var。希望我对你很清楚。
  • 好的。直到我发布答案后,我才看到您发表评论...您是否在您致电 removeFromSuperview 时检查过 wbsSummaryLoadView.view 不是 nil
  • 是的,我已经检查了两次。在那之前一切都很好。
猜你喜欢
  • 2018-01-21
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2018-06-02
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
相关资源
最近更新 更多