从Objective C中的子类访问变量/函数

时间:2010-01-10 13:56:40

标签: iphone objective-c class

我在访问公共变量'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]无效的原因有什么建议吗?

5 个答案:

答案 0 :(得分:1)

IBOutlet宏表示当UIActivityIndicatorViewQuickStartViewController的实例通过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];
...
}