如何在 iOS 中获得持久视图?
Posted
技术标签:
【中文标题】如何在 iOS 中获得持久视图?【英文标题】:How can I have a persistent view in iOS? 【发布时间】:2011-10-14 13:55:02 【问题描述】:我们正在使用 UInavigationController,其中一个视图是播放音轨的视图。
我们正在使用 AVfountation 框架。
我们在按钮点击时导航到音频列表(播放音乐的地方)
-(IBAction)audioBtnClicked
audiolist *audio=[[audiolist alloc] initWithNibName:@"audiolist" bundle:nil];
[self.navigationController pushViewContrller:audio animated:YES];
[audiolist release];
当用户播放音乐并离开时,音乐继续播放
问题:当用户导航回歌曲列表并播放另一首曲目时, 2 首歌曲同时播放。
我们认为每次用户导航返回时都会创建一个新的audiolist
实例。
我们希望只有一个audiolist
实例。我们如何使audiolist
的第一个实例持久化,我们又如何引用它?
【问题讨论】:
xcode 只是一个编辑器。 【参考方案1】:你必须这样做
[audio release];
而不是
[audiolist release];
audiolist 似乎是您的班级名称。命名约定说类应该是大写的和驼峰式的,所以它应该是 AudioList。它会让你的代码更具可读性。
要让您的 AudioList 有一个共享实例,您可以这样做:
在标题中添加类方法:
+ (AudioList *) sharedInstance;
然后将其添加到您的实现文件中:
@implementation AudioList
static AudioList *gSharedInstance = nil;
+ (AudioList *) sharedInstance
if (gSharedInstance == nil)
gSharedInstance = [[AudioList alloc] init];
return gSharedInstance;
现在您可以随时访问该实例
[AudioList sharedInstance];
干杯。
【讨论】:
感谢您的快速回复。此实现运行良好并解决了我们遇到的问题。 我很高兴听到这个消息,大卫。如果对您有帮助,请接受并投票赞成我的回答:)谢谢! 嗨,Johannes,我已经接受了它,但不幸的是,由于我是一个相当新的用户,所以无法投票。谢谢!【参考方案2】:创建一个处理所有音乐播放的单例 AudioManager 类。当您导航到该视图控制器时,获取该 AudioManager 的共享实例以执行您在该视图中执行的任何操作。
您不希望视图持续存在,因为这将是 MVC 的不良分离。
Apple 讨论了不同的设计模式及其 Objective-C 实现,包括单例:
http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html#//apple_ref/doc/uid/TP40002974-CH6-SW6
【讨论】:
感谢您介绍单例!我试图用它来解决不同的问题,但现在也面临问题。由于这是一个完全不同的问题,我开始了一个新的问题线程:***.com/questions/7783741/…以上是关于如何在 iOS 中获得持久视图?的主要内容,如果未能解决你的问题,请参考以下文章