1

我們使用UInavigationController,其中一個視圖是播放音軌的視圖。如何在iOS中擁有持久視圖?

我們正在使用AVfountation框架。

我們導航到audiolist(其中音樂播放)按鈕點擊

-(IBAction)audioBtnClicked 
{ 
    audiolist *audio=[[audiolist alloc] initWithNibName:@"audiolist" bundle:nil]; 
    [self.navigationController pushViewContrller:audio animated:YES]; 
    [audiolist release]; 
} 

當用戶播放音樂和導航離開時,音樂繼續播放

問題:當用戶返回到歌曲列表並播放另一首歌曲, 2首歌曲正在同時播放。

我們認爲每當用戶導航回來時都會創建audiolist的新實例。 我們只想要一個audiolist的實例。我們如何使audiolist的第一個實例持續存在,我們該如何引用它?

+0

Xcode是隻是一個編輯器。 – vikingosegundo

回答

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]; 

乾杯。

+0

感謝您的快速回復。這個實現很好,並解決了我們遇到的問題。 – davt

+0

我很高興聽到這個,大衛。請接受和upvote我的回答,以防它對你有幫助:)謝謝! –

+0

嗨約翰內斯,我已經接受了,但不幸的是,由於我是一個相當新的用戶,無法升級它。謝謝! – davt

0

創建一個處理所有音樂播放的單個AudioManager類。當您導航到該視圖控制器時,抓取該AudioManager的共享實例,以便在該視圖中執行任何操作。

您不希望視圖持續存在,因爲這會導致MVC分離。

蘋果有不同的設計模式和他們的Objective-C的實現,包括單身的一些討論:

http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html#//apple_ref/doc/uid/TP40002974-CH6-SW6

+0

感謝您介紹單身!我試圖用它來解決不同的問題,但現在也面臨着問題。由於這是一個不同的問題,我開始了一個新的問題線程:http://stackoverflow.com/questions/7783741/singleton-causes-app-to-crash-when-changing-view-controllers – davt