【问题标题】:viewDidLoad getting called every timeviewDidLoad 每次都被调用
【发布时间】:2018-04-15 20:31:55
【问题描述】:

我有一个主视图(第一个视图),单击一个按钮会将我带到另一个视图(第二个视图),其中包含 tableview..我在 viewDidLoad 中解析来自我的服务器的数据。问题是如果我关闭我的第二个视图使用关闭模态视图并在我的主视图中单击相同的按钮。控制器转到 viewDidLoad 而不是 viewDidAppear ..这使得再次加载服务器并填充表格视图。

-(void)loadFeeds
{
    //Activity Indicator MBProgressHUD
    if(activity == nil){
        activity = [[MBProgressHUD alloc] initWithView:self.view];
        [self.view addSubview:activity];
        [activity hide:YES];
    }

    //Pull to Refresh (Ego refresh header view) Declarations Facebook and Twitter
    if (_refreshHeaderViewTwitter == nil) {
        EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tblTwitter.bounds.size.height, self.view.frame.size.width, self.tblTwitter.bounds.size.height)];
        view.delegate = self;
        [self.tblTwitter addSubview:view];
        _refreshHeaderViewTwitter = view;
        [_refreshHeaderViewTwitter refreshLastUpdatedDate];
    }

    [activity show:YES];
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

        getTwitterArray = [[NSMutableArray alloc]initWithArray:[Util getJsonArray:Twitter]];

        dispatch_async(dispatch_get_main_queue(), 
                       ^{            
                           [self.tblTwitter reloadData];
                           [activity hide:YES];
                       });
    });
}

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    关闭视图控制器可以摆脱它。

    您将不得不手动管理持久性。

    因此,您需要将视图控制器的最后状态保存在比视图控制器更高的持久性级别。那是在磁盘上还是在 appdelegate 中。这取决于您,但视图控制器工作正常。

    【讨论】:

    • 我有另一个表格视图,我正在从 youtube 加载我的提要并在 viewDidload 中解析它,当我关闭和打开控制器时不会进入 viewDidLoad 而是 viewDidAppear
    • 你是说当它再次打开时它没有重新解析?
    • yup.coz 通常控制器会进入 viewDidAppear 并且之前缓存的数据会存储在数组中,这将是 tableview。但我的问题是每次我呈现并关闭我的模态视图控制器时它都会进入 viewdidload。这会导致每次重新加载 tableview
    • 你无法阻止它。正在调用 viewDidLoad,因为视图之前已被销毁。
    【解决方案2】:

    如果您希望视图控制器在您关闭其呈现的视图控制器之前一直存在,那么您可以将视图控制器保留为属性

    @property (nonatomic, retain) MyModalViewController *myModalViewController;

    并在它的 getter 方法中延迟加载它..

    - (MyModalViewController *)myModalViewController
    {
      if (_myModalViewController == nil)
      {
        _myModalViewController = [[MyModalViewController alloc] initWithNibName:nil bundle:nil];
      }
      return _myModalViewController;
    }
    

    然后您的视图控制器将挂起,如果/当您收到内存警告时,将属性设置为 nil,它将正确卸载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-05
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      相关资源
      最近更新 更多