【问题标题】:How can I have a persistent view in iOS?如何在 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 只是一个编辑器。

标签: objective-c ios cocoa-touch uiviewcontroller uinavigationcontroller


【解决方案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

【讨论】:

  • 感谢您介绍单例!我试图用它来解决不同的问题,但现在也面临问题。由于这是一个完全不同的问题,我开始了一个新的问题线程:stackoverflow.com/questions/7783741/…
猜你喜欢
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2019-05-25
  • 2018-02-13
  • 2019-04-09
  • 2023-01-17
相关资源
最近更新 更多