2010-11-24 3 views
2

appDelegate에서 navbar의 오른쪽 버튼을 설정하려고하면 코드가 컴파일되고 오류없이 실행되지만 버튼이 나타나지 않습니다.AppDelegate의 iphone setRightBarButtonItem

도움을 주시면 감사하겠습니다.

감사합니다.

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이라고 가정 해 봅시다. 그런 다음 viewDidLoad의 코드를 RootViewController에 넣어야합니다. 또는 삽입에 애니메이션을 적용하고 있으므로 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

+0

난 당신이 질문을 편집하고 싱글 정보로 업데이트한다고 생각합니다. 왜 애플 리케이션 위임 내에서 버튼을 추가하고자하는지에 대해 더 이해가됩니다. 또한 모든 관련 정보가 질문에 포함되어있는 경우 해답을 쉽게 이해할 수있을뿐만 아니라 해답을 쉽게 제공 할 수 있습니다. –

+0

싱글 톤 객체 MKStoreKit 3에 대한 정보와 링크로 업데이트했습니다.이 정보가 도움이 되었기를 바랍니다. – Mike

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을 설정하고 IAP를 수신하도록 NSNotificationCenter를 설정 (완료) 애니메이션
  2. 을 시작을 방송하기 위해 싱글 톤 객체 NSNotificationCenter를 설정
  3. (이 달성 할 수있는 최선의 방법 인 경우) IAP는

http://blog.mugunthkumar.com/coding/introducing-mkstorekit- @ Mugunth 쿠마에 의해 나는 MKStoreKit 3을 사용하고이

에 확장하기 완료 -version-3/

는 내 요구에 맞게 단순히 넣어이 문제를 수정했습니다; 이 작업이 완료되면 내 VC에서

는 내가이 작업이 완료되는 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]; 

년을 시작하려면 다음을 사용합니다. 파일의

MKStoreManager.m

- (무효) provideContent은 (는 NSString *) productIdentifier forReceipt은 (을 NSData *) receiptData는

내가 잠금을 해제 또는 여기에 다운로드 콘텐츠하지만 활동 표시를 중지해야합니다 또한 그것은 내가 음모를 놓치고있는 곳이다.

감사합니다, 마이크 내 응답이 오래이었다 나는이 게시물에 대한 별도의 답변으로 게시 한

+0

이제 확인되었습니다. NSNotificationCenter를 사용하여 완벽하게 작동합니다. – Mike

관련 문제