Objective-C - UIViewController 在另一个控制器之上加载

Objective-C - UIViewController loading on top of another controller

我正在使用 NSNotification 中心来检测货币变化,以便我可以更新所有其他 类。当发生货币变化时,所有其他 类 和视图都会更新,但是当没有货币变化时,如果您按下后退按钮返回主页,视图将加载到已经存在的页面之上看法。

NSNotification 中心代码

  if ([overviewModel.currency isEqual:@"GBP"]){
                [[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
                                                                    object:self];
            } else {

                [[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
                                                                    object:self];
            }

首页更新数据处理代码:

  for (UIView *b in self.view.subviews) {
    [b removeFromSuperview];
}


self.build = [[ApiRequestBuild alloc]initWithVersionKey:kAPI_VERSION_KEY requestType:kAPI_REQUEST_TYPE data:@""];
[self.build setQueryWithSection:@"homepage" value:@"" parameter:@[]];

self.request = [[ApiRequest alloc]init];
self.request.delegate = self;
[self.request sendRequestWithParams:[self.build buildConfig] toUrl:kAPI_URL_STRING];

我知道为什么会这样,请求被再次发送所以页面加载到已经存在的页面之上,我不明白的是为什么从子视图代码中删除没有摆脱的视图以及我将如何解决这个问题?谢谢

如果从另一个线程(而不是主线程)调用 removeFromSuperview,它将不起作用。您的通知将在发出通知的同一线程上收到。我敢打赌您正在另一个线程上收听模型更改事件(关于您的货币状态)。

在遍历您的子视图副本以将其全部删除之前尝试分派到主队列。