如何在 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 中获得持久视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在核心数据中持久化重复事务并将其呈现在表格视图中

ios/uipickerview:我如何获得美国各州的选择器视图

iOS:如何使用 Swift 在视图之间滑动

如何将 IPropertyBag 持久化到磁盘

如何在 iOS 7 中获得麦克风音量?

如何在 iOS 中获得最流畅的动画?