我在访问公共变量'activity'时遇到问题,这是UIActivityIndicatorView
类型,请参阅下面QuickStartViewController.h
中的类声明:
@interface QuickStartViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate> {
@public
IBOutlet UIActivityIndicatorView *activity;
}
@property (nonatomic, retain) UIActivityIndicatorView *activity;
@end
该函数从另一个类调用:
#import "QuickStartViewController.h"
@interface NumberValidator : QuickStartViewController....
见下文:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[activity startAnimating];
NSLog(@"This function is called, but [activity startAnimating] still doesn't work...");
}
注意:[activity startAnimating]
在QuickStartViewController
类中调用时工作正常。
您对[activity startAnimating]
无效的原因有什么建议吗?
答案 0 :(得分:1)
IBOutlet
宏表示当UIActivityIndicatorView
或QuickStartViewController
的实例通过NSBundle的NumberValidator
实例化或调用UIViewController时,将构造并分配+loadNibNamed:owner:options:
initWithNibName:bundle:
如果您没有通过它的nib实例化NumberValidator
,则不会分配activity属性。如果您是通过笔尖构建它,那么您没有在Interface Builder中为插座指定适当的UIActivityIndicatorView
,通过CTRL +将UIActivityIndicatorView
拖到控制器上。
答案 1 :(得分:0)
我首先在-connectionDidFinishLoading中设置一个断点:并验证该活动不是nil。
答案 2 :(得分:0)
这可能有效 - 即活动指示器开始动画。但是可能还有另一个问题 - 在您停止处理connectionDidFinishLoading
方法之前,GUI不会刷新,因此似乎 [activity startAnimating]
不起作用。 (您可以通过不调用[activity stopAnimating]来测试它 - 它最终应该显示出来。)
参见例如this thread (connectionDidFinishLoading - how to force update UIView?)和my response。
答案 3 :(得分:0)
是(a)没有编译,(b)碰到它时崩溃,还是(c)没有做任何事情?我怀疑它是(c),这是因为那里没有活动指示器。尝试将活动值记录到控制台,并验证其是否为有效对象。
答案 4 :(得分:0)
感谢您的快速回复。
connectionDidFinishLoading成功执行,我已经放置了NSLogs来确认。但是,startAnimating没有。
注意:
如果我做[活动startAnimating];在以下内容中它起作用......:
QuickStartViewController.m(不是NumberValidator.m):
- (IBAction)showPicker:(id)sender {
[activity startAnimating];
...
}