重新加载ViewController

时间:2017-01-17 05:46:40

标签: ios objective-c uiviewcontroller

我想在iOS应用程序中重新加载ViewController。我做了一些研究,答案总是[self viewdidload]setNeedsDisplay();但在我的情况下我需要重新加载所有内容(init,loadView和viewDidLoad)

我写了一个重装函数:

- (void)reload{
    [self init];
    [self loadView];
    [self viewDidLoad];
} 

但我收到了警告

  

“表达结果未使用”

。它有效,但我认为这不是正确的做法。有什么建议吗?

这是我的视图控制器的代码:

-(id) init {

    switch (_route) {

        case ROUTE_GPS:
            baseController = [[GpsController alloc] init];
            _key = KEY_GPS;
            break;

        case ROUTE_TEST:
            baseController = [[TestController alloc] init];
            _key = KEY_TEST;
            break;

        default:
            break;
    }

    return [super init];
}

-(void) loadView {
    [super loadView];
    [baseController initView:self];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(update:) name:_key object:nil];
}

2 个答案:

答案 0 :(得分:3)

也许你可以尝试这样的事情:

-(void)viewDidLoad
{
    [super viewDidLoad];
    [self configureView];
}

-(void)reloadView
{
    [self configureView];
}

-(void)configureView
{
    variable1 = something;
    variable2 = somethingElse;
}

-(void)atSomeOtherPointInTime
{
    [self reloadView];
}

您不应该自己调用视图控制器的生命周期功能,例如viewDidLoadviewWillAppear等。

答案 1 :(得分:1)

根据Apple's documentation,你应该从不调用loadView方法。

  

你永远不应该直接调用这个方法。视图控制器调用   请求view属性但当前为nil时此方法。   此方法加载或创建视图并将其分配给视图   属性。