ios - 为什么我的ViewDidLoad每次都会加载?

标签 ios viewdidload

我正在创建一个应用程序,在其中实现 FB 登录。所以我在 ViewController.m 文件的 ViewDidLoad 中编写了 FBLogin 按钮代码。

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
loginButton.center = self.view.center;
[self.view addSubview:loginButton];

}

但是当我运行这段代码时。 fb 按钮出现在我的应用程序的所有页面中,这意味着我的 viewController.m ViewDidLoad 方法每次都会调用。为什么? 我过去 4 小时一直在寻找解决方案,但尚未得到任何结果。 请帮帮我。

最佳答案

正如你所说,你的 View Controller 继承自这个 View Controller ,因此每个调用[super viewDidLoad]的 View Controller 都会执行这个方法。 (解决方案不是删除 super 调用)。

您可以:而不是创建此 ViewController 和所有其他 View Controller 继承自此 View Controller :

  • 创建一个 CommonViewController,它实现 View Controller 之间的所有通用内容
  • 创建一个 FacebookLoginViewController,它也继承自 CommonViewController

因此,您的继承树将如下所示:

CommonViewController
      /          \
     /            \
    /              \
FacebookLoginVC    OtherViewControllers

而不是:

ViewController (which is equivalent to FacebookViewController)
     |
     |
     |
OtherViewControllers

关于ios - 为什么我的ViewDidLoad每次都会加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30118585/

相关文章:

ios - Firebase 崩溃报告 : Failed to transmit crash: Error 400

ios - 如何在 viewDidLoad 方法内部的 UIViewController 中初始化方法

ios - 根据用户是否注册/登录,通过 segue 过渡到某个 ViewController。操作系统

ios - swift/iOS : IBOutlet nil after loading view controller

ios - 将模块添加到 ios 框架中,应用程序获取 "module not found"

ios - 如何通过引用将对象从一个类传递到另一个类?

objective-c - UIPicker 特定列和行的字体大小

iOS 核心数据 - 编辑对象后不会立即获取任何内容

ios - 调用了 awakeFromNib,未调用 viewDidLoad

ios - viewWillAppear 和 viewDidLoad 中的方法未加载