检查当前 viewController 类是不是为 IOS 7 中的 Person ViewController 时出现问题
Posted
技术标签:
【中文标题】检查当前 viewController 类是不是为 IOS 7 中的 Person ViewController 时出现问题【英文标题】:Issue when checking if current viewController class is ABPersonViewController in IOS 7检查当前 viewController 类是否为 IOS 7 中的 Person ViewController 时出现问题 【发布时间】:2013-10-04 12:42:54 【问题描述】:我正在加载ABPeoplePickerNavigationController
。在人员选择器中单击联系人时,我正在检查条件
if([navigationController isKindOfClass:[ABPeoplePickerNavigationController class]]
&& [viewController isKindOfClass:[ABPersonViewController class]])
//Statements
但在 ios 7 中,我注意到第二个条件,即
[viewController isKindOfClass:[ABPersonViewController class]
始终返回 NO。我知道加载的视图控制器是ABPersonViewController
。
在 IOS 6 之前,这一直/正在正常工作。可能是什么问题?无论如何我可以解决这个问题。
编辑:
条件在UINavigationController
Delegate 内部检查
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
viewController 类在登录时显示为ABContactViewController
。
【问题讨论】:
日志或调试器说明它是什么类? @Mundi 它说 ABContactViewController。 UINavigationController 委托方法中的@Rob 嗯,这就是你的答案。这不是ABPersonViewController
。至于为什么这是一个内部类而不是另一个,我不能说(顺便说一句,我有一个不同的类,ABMembersViewController
)。可能是一个类集群。问题是您是否真的需要检查 AddressBookUI 框架内部使用的控制器的类。如果需要,您也可以更新代码以检查 ABContactViewController
。但是,让我感到震惊的是,这总是很脆弱,受制于他们未来所做的任何内部实现更改。
我尝试使用ABContactViewController
代替ABPersonViewController
。但ABContactViewController
无法识别
【参考方案1】:
检查你的类时你会发现iOS7返回了不同的类型。
查看您需要检查的逻辑。您不必使用自省来对人员选择器操作做出适当的反应。只需从 ABPeoplePickerNavigationControllerDelegate 实现标准委托方法。特别是,您必须实现:
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person;
【讨论】:
我已经实现了- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
。我使用导航控制器委托为联系人选择器和 ABPersonViewController 提供不同的导航栏。这就是为什么我检查navigationController 是否为ABPeoplePickerNavigationController
而viewController 是否为ABPersonViewController
。
那是一个不同的导航控制器。尝试在不检查类的情况下实现此逻辑。您不应依赖 Apple 可能随时更改的类。以上是关于检查当前 viewController 类是不是为 IOS 7 中的 Person ViewController 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
iOS 检查 ViewController 实例是不是打开并切换 ViewControllers
如何检查视图而不是 viewController 是不是可见?
iOS:如何检查一个变量是不是在 dispatch_async 的另一个 ViewController 中改变了他的值?