变量的范围在viewDidLoad中初始化为另一个方法

时间:2013-04-12 09:50:43

标签: ios objective-c xcode

在视图中加载我有这个部分:

    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActionSheetStyleBlackTranslucent];
    [self.view addSubview:spinner];
    [spinner startAnimating];

哪种方法正常,

然而进一步向下:webViewDidFinishLoad我有:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    [spinner stopAnimating];
}

旋转器的范围已经丢失。我没有旋转器作为出口或属性/合成 - 仍然掌握它。我认为一旦我掌握了范围,它应该使对象能力更好!

3 个答案:

答案 0 :(得分:4)

  

旋转器的范围已经丢失。

spinner本地变量。一旦代码在声明后达到最接近的大括号,它就会消失。如果您不希望它发生,请使spinner成为类的实例变量或类扩展。

实例变量在接口声明或类扩展声明之后在花括号内声明,例如:

// In the header file...
@interface MyClass {
    ...
    UIActivityIndicatorView *spinner;
}
...
@end

// In the implementation file...
@interface MyClass() /*class extension*/ {
    ...
    UIActivityIndicatorView *spinner;
}
...
@end

答案 1 :(得分:1)

您需要在头文件中使微调器成为实例变量,否则webViewDidFinishLoad将无法看到该变量。

答案 2 :(得分:0)

在viewDidLoad中为spinner设置标签

  spinner.tag = 90;

并在webViewDidFinishLoad方法中使用以下行

 UIActivityIndicatorView *activity =(UIActivityIndicatorView *) [self.view viewWithTag:90];
 [activity stopAnimating];
     or  declare spinner in .h file so that you can use it any where.