我正在尝试从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];
答案 0 :(得分:2)
首先指出几点。
在短时间内创建大量自动释放对象的情况下使用NSAutoReleasePool
,例如在一个循环中。引用Apple:
如果您的应用程序创建了很多 临时自动释放的对象 然而,它可能是事件循环 有利于创造“本地” 自动释放池有助于最小化 峰值内存占用。
由于您没有创建任何自动释放的对象,因此不必拥有NSAutoReleasePool
。
通常,您会将代码设置为viewDidLoad
UIViewController
中应该响应按钮的导航栏按钮。当UINavigationController
将新UIViewController
推送到其堆栈时,它将询问控制器是否应显示任何按钮。
假设UINavigationController
的根视图控制器是默认生成的RootViewController
。然后,您应该将代码放在viewDidLoad
的{{1}}中。或者也许在RootViewController
中,因为您正在为插入设置动画。
viewDidAppear:
如果你真的必须在app委托中拥有可以通过以下方式完成的代码:
UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv];
[aiv startAnimating];
[aiv release];
[self.navigationItem setRightBarButtonItem:activityButtonItem animated:YES];
[activityButtonItem release];
答案 1 :(得分: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但是很难弄清楚单身人士如何object可以告诉相应的视图控制器停止动画。
我想过尝试使用类似的东西:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (IAP_complete:) name: IAP_completeNotification object:nil];
但还没有想出完整的过程从头到尾。感谢您提供的任何帮助;
我正在使用Mugunth Kumar的MKStoreKit 3 http://blog.mugunthkumar.com/coding/introducing-mkstorekit- - 版本-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
中- (void)provideContent:(NSString *)productIdentifier forReceipt:(NSData *)receiptData
我在这里解锁或下载内容,但需要停止活动指示器,这也是我错过情节的地方。
谢谢, 麦克