2010-11-24 56 views
2

我想從appDelegate中設置導航欄的右鍵,代碼編譯和執行沒有錯誤,但沒有出現按鈕。iphone setRightBarButtonItem from AppDelegate

任何援助將不勝感激。

謝謝。

NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init]; 
    UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
    UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv]; 
    [aiv startAnimating]; 
    [aiv release]; 


    [self.navigationController.navigationItem setRightBarButtonItem:activityButtonItem animated:YES]; 
    [activityButtonItem release]; 
    [apool release]; 

回答

2

第一個幾點。

在短時間內創建大量自動釋放對象的情況下,您可以使用NSAutoReleasePool,例如,在一個循環中。引述蘋果:

如果您的應用創造了很多 臨時自動釋放對象的範圍內 事件循環,但是,它可能是 利於打造「本地」 自動釋放池,以幫助最大限度地減少 峯值內存佔用。

由於沒有創建任何自動釋放對象,沒有必要有NSAutoReleasePool

通常情況下,您會將代碼設置爲UIViewControllerviewDidLoad中的導航欄的按鈕,該按鈕將響應該按鈕。當UINavigationController將新的UIViewController推到其堆棧上時,它會要求該控制器顯示任何按鈕。

假設您的UINavigationController的根視圖控制器是默認生成的RootViewController。那麼你應該把代碼放在viewDidLoadRootViewController。或者可能在viewDidAppear:中,因爲您正在爲插入設置動畫。

UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv]; 
[aiv startAnimating]; 
[aiv release]; 

[self.navigationItem setRightBarButtonItem:activityButtonItem animated:YES]; 
[activityButtonItem release]; 

如果你真的必須在應用程序委託的代碼,它可以通過以下方式實現:

UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv]; 
[aiv startAnimating]; 
[aiv release]; 

UIViewController *rootController = [self.navigationController topViewController]; 
rootController.navigationItem.rightBarButtonItem = activityButtonItem;  
[activityButtonItem release]; 
+0

謝謝,我已經張貼作爲一個單獨的答案,這篇文章是我的答覆是長.. – Mike 2010-11-24 21:28:20

+0

我想你應該修改你的問題,並與單信息進行更新。對於爲什麼要添加應用程序委託中的按鈕更有意義。如果所有相關信息都存在於問題中,它還可以更容易地提供一個良好的答案並理解答案。 – 2010-11-24 21:38:06

0

羅伯特·謝謝你的建議。

我已經取消了autorelease,欣賞通常應該在ViewDidLoad中使用,並且可以在使用那裏啓動活動動畫時確認作品是否完美。

我有問題是:

我可以使用的示例代碼中的相應視圖控制器啓動動畫

UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv]; 
[aiv startAnimating]; 
[aiv release]; 

[self.navigationItem setRightBarButtonItem:activityButtonItem animated:YES]; 
[activityButtonItem release]; 

但是我有IAP一個單獨的對象,其是從各種視圖稱爲我的應用程序中的控制器,我需要能夠停止活動動畫 - 認爲只需設置rightBarButton = nil,但努力找出單身物體如何告訴相應的視圖控制器停止動畫。

我想過嘗試使用類似:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (IAP_complete:) name: IAP_completeNotification object:nil]; 

,但還沒有想出的完整過程開始到結束。感謝您提供的任何幫助;

  1. 的viewController設置rightBarItem並啓動動畫(完成)
  2. 設立NSNotificationCenter監聽IAP完成(如果這是實現的最佳途徑)
  3. 設立單獨的對象NSNotificationCenter播出IAP完成

要在此

通過Mugunth庫馬爾@http://blog.mugunthkumar.com/coding/introducing-mkstorekit-擴大我使用MKStoreKit 3 -version-3/

我已經修改了這適合我的需要,但簡單地說;

在我的VC我用下面的啓動在應用程序內購買

//display activity indicator 
UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv]; 
[aiv startAnimating]; 
[aiv release]; 

[self.navigationItem setRightBarButtonItem:activityButtonItem animated:YES]; 
[activityButtonItem release]; 

//begin in app purchase 
[[MKStoreManager sharedManager] buyFeature:appID]; 

一旦完成我需要告訴VC,這是完整的。

文件中

MKStoreManager.m

- (空)provideContent:(的NSString *)產品識別 forReceipt:(NSData的*)receiptData

我解鎖或從這裏下載的內容,但需要停止活動的指標這也是我錯過情節的地方。

謝謝, 邁克

相關問題