UIViewController

本文深入探讨了iOS和Android开发的基础知识,包括UIViewController、UIView等关键组件的作用及应用,同时阐述了如何检测设备旋转和内存警告,以及UIViewController作为视图控制器基类的重要性。

1.UIViewController:视图控制器,意如其名.

2.每个视图控制器都自带一个视图,并负责这个视图相关的一个切事物.

3.UIViewController和UIView是两大基类,前者是MVC中C的基类,后者是MVC

中V的基类.UIViewController负责Model与View的通信.

4.还可以检测设备旋转以及内存警告.

5.UIViewController是所有视图控制器类的基类,定义了控制器的基本功能.


### GIDSignIn 使用指南及 UIViewController 类型相关问题解决 在使用 `GIDSignIn.sharedInstance.signInWithPresentingViewController:self completion:` 方法时,如果出现与 `self` 或 `UIViewController` 类型相关的报错,可能是以下原因导致的。以下是详细的解决方案和使用指南。 #### 1. 确保 `self` 是 `UIViewController` 的实例 该方法要求传入的参数是一个符合 `UIViewController` 类型的对象。如果 `self` 不是 `UIViewController` 或其子类,则会导致编译错误或运行时崩溃。可以通过以下方式验证 `self` 是否为 `UIViewController` 的实例: ```objc if ([self isKindOfClass:[UIViewController class]]) { [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) { if (error == nil && result != nil) { NSLog(@"登录成功"); } else { NSLog(@"登录失败:%@", error.localizedDescription); } }]; } else { NSLog(@"self 必须是 UIViewController 的实例"); } ``` 此代码片段确保了调用方是一个有效的视图控制器[^1]。 #### 2. 设置正确的代理 在调用 `signInWithPresentingViewController:completion:` 方法前,必须确保 `GIDSignIn.sharedInstance.delegate` 已被正确设置为当前视图控制器。例如: ```objc GIDSignIn.sharedInstance.delegate = self; ``` 如果没有正确设置代理,可能导致登录界面无法正常显示或回调失败[^2]。 #### 3. 配置 Info.plist 文件 确保在项目的 `Info.plist` 文件中添加了必要的键值对,包括但不限于: - `CFBundleURLTypes`: 定义应用的 URL Scheme。 - `GoogleSignInClientID`: 设置 Google Sign-In 的客户端 ID。 如果缺少这些配置,可能导致登录失败或回调异常[^3]。 #### 4. 更新 Google Sign-In SDK 如果使用的 Google Sign-In SDK 版本较旧,可能导致方法签名不匹配或功能异常。建议通过 CocoaPods 更新到最新版本: ```bash pod 'GoogleSignIn' pod install ``` 更新后,确保代码中的方法签名与最新版本的 SDK 保持一致[^4]。 #### 5. 处理 iOS 13 及更高版本的兼容性问题 对于 iOS 13 及更高版本,需要在 `SceneDelegate` 中初始化窗口和根视图控制器,否则可能导致登录界面无法正常显示。例如: ```objc self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene*)scene]; self.window.rootViewController = [[UIViewController alloc] init]; [self.window makeKeyAndVisible]; ``` #### 6. 错误处理 如果登录过程中出现错误,可以通过 `NSError` 对象的 `localizedDescription` 属性获取详细信息。常见的错误包括但不限于: - 用户取消登录。 - 网络连接问题。 - 配置错误(如未正确设置客户端 ID)。 以下是一个完整的实现示例: ```objc [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) { if (error == nil && result != nil) { GIDGoogleUser *user = result.user; NSString *googleIdToken = user.idToken; NSString *googleAccessToken = user.accessToken; NSLog(@"Google ID Token: %@", googleIdToken); NSLog(@"Google Access Token: %@", googleAccessToken); } else { NSLog(@"Google 登录失败:%@", error.localizedDescription); } }]; ``` #### 7. UIViewController 类型的相关用法 `UIViewController` 是 iOS 开发中用于管理用户界面的核心类。以下是一些常见用法: - **初始化视图控制器**:可以通过 `init` 或 `initWithNibName:bundle:` 方法创建视图控制器实例。 - **加载视图**:当视图控制器的视图首次被访问时,会自动调用 `loadView` 和 `viewDidLoad` 方法。 - **生命周期方法**:常用的生命周期方法包括 `viewWillAppear:`、`viewDidAppear:`、`viewWillDisappear:` 和 `viewDidDisappear:`。 - **导航**:可以通过 `UINavigationController` 实现视图控制器的推送和弹出操作。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值