【发布时间】:2012-12-26 17:24:44
【问题描述】:
我对模态转换的工作原理缺乏认真的了解,所以请不要留下最简单的答案。
我有两个视图,它们在情节提要中设置了自己的视图控制器。主菜单上的按钮通向其他视图。我完全通过 ctrl-click 并选择模态转换来设置这个转换。我还有一个从其他视图返回主菜单的按钮,设置类似。
为了进一步了解这些转换,我决定我希望主菜单在加载时播放声音,但仅在我第一次点击运行时播放,而不是在我点击其他视图按钮时再次播放返回菜单视图。
在我的菜单视图中,我有一个私有属性 BOOL
@interface MainMenuViewController ()
@property BOOL menuSoundPlayed;
@end
还有我的 viewDidLoad...
- (void)viewDidLoad
{
[super viewDidLoad];
if (!self.menuSoundPlayed){
//sound setup code omitted for clarity
AudioServicesPlaySystemSound(mySound);
self.menuSoundPlayed = YES;
}
}
有人能帮我理解为什么每次加载主菜单视图时都会播放菜单声音吗?我确实承认 menuSoundPlayed 从未真正初始化过,但我什至不知道我会在哪里这样做。
旁注:我喜欢苹果为我们提供了故事板等所有这些便利,但我几乎希望更容易看到这些东西背后的所有代码,这样我才能真正理解当我“segue”时发生了什么' 在视图之间。
无论如何,谢谢!
【问题讨论】:
-
因为故事板每次都会创建一个新的 VC 实例。当一个实例被释放并分配一个新实例时,设置属性并不重要
-
如果主菜单是“正在加载”,则调用viewDidLoad。理想情况下 viewdidLoad 应该只被调用一次,除非另一个 viewController(同一个类)被推入堆栈。
标签: iphone objective-c storyboard modal-dialog segue