【问题标题】:A simple viewDidLoad question一个简单的 viewDidLoad 问题
【发布时间】:2011-04-09 14:56:43
【问题描述】:

我有一个带有UINavigationControllertabBarController 的应用程序,并且有很多浏览量。

我的两个主要视图,对应于两个选项卡,在加载数据时都显示一个不错的MBProgressHUD。这是从viewDidLoad 触发的,并且只打算显示一次。服务器的后续刷新不使用MBProgressHUD

问题是,viewDidLoad 在某些情况下会再次被调用。我相信这是因为视图由于内存限制而被卸载,然后稍后重新加载,这触发了我只想在第一次运行的代码。

我的问题:如何确保仅在他们第一次加载视图时才调用它,而不是尝试在某处存储临时计数。我所有的解决方案似乎都非常骇人听闻。 :)

谢谢!

【问题讨论】:

    标签: iphone objective-c cocoa-touch ios4 viewdidload


    【解决方案1】:

    在视图控制器中:

    @property (nonatomic, assign) BOOL loadStuff;
    

    在初始化中:

    self.loadStuff = YES;
    

    在 viewDidLoad 中:

    if (self.loadStuff) {
      // load stuff here
    }
    
    self.loadStuff = NO;
    

    【讨论】:

    • 看,这很容易。不知道为什么我没有想到……试图让它变得比必要的更复杂。注意:因为我使用 IB 设置了视图,所以没有调用 initWithStyle。我利用了 BOOLs 默认为 NO 的事实,并以此为依据做了我的逻辑。再次感谢。
    【解决方案2】:

    仅当您实际执行需要一段时间的代码时才安装 HUD。然后事情就会奏效。可能是这样的:

    @interface MyViewController : UIViewController {
        NSData* data;
    }
    @end
    
    @implementation MyViewController
    - (void)loadData {
        // put up HUD
        // start loading the data, will call loadDataFinished when done
    }
    
    - (void)loadDataFinished {
        // bring down HUD
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        if (data == nil) {
            [self loadData];
        }
    }
    
    @end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多