无法编辑或关闭 CNContactViewController (iOS)

Posted

技术标签:

【中文标题】无法编辑或关闭 CNContactViewController (iOS)【英文标题】:Unable to edit or dismiss CNContactViewController (iOS) 【发布时间】:2016-11-12 18:25:21 【问题描述】:

我在我的应用中展示了CNContactViewController 的一个实例。我希望用户既可以编辑联系人,也可以关闭此视图控制器。下面是呈现视图控制器的代码,它嵌入在UINavigationController 中。正如你在代码中看到的,我有allowsEditing = YES,但是看截图;你可以看到我无法编辑。谁能帮我看看我错过了什么?谢谢!

CNContactViewController *contactController = [CNContactViewController viewControllerForUnknownContact:contact];

contactController.allowsEditing = YES;
contactController.delegate = self;

contactController.contactStore = store;

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:contactController];
navController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:navController animated:YES completion:nil];

编辑:我尝试了@WrightCS 建议的不同方法:

[self presentViewController:contactController animated:YES completion:nil];

并且,一定要添加这个委托方法:

- (void)contactViewController:(CNContactViewController *)viewController
       didCompleteWithContact:(CNContact *)contact
    [self dismissViewControllerAnimated:YES completion:nil];


但是,反复得到这个错误日志:

[CNUI ERROR] Contact view delayed appearance timed out

【问题讨论】:

【参考方案1】:

尝试直接呈现联系人控制器,而不是创建UINavigationController 实例。

[self presentViewController:contactController animated:YES completion:nil];

CNContactViewControllerDelegate

- (void)contactViewController:(CNContactViewController *)viewController 
   didCompleteWithContact:(CNContact *)contact;

出现在主线程

dispatch_async(dispatch_get_main_queue(), ^
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:contactController];
    navController.modalPresentationStyle = UIModalPresentationFormSheet;
    [self presentViewController:navController animated:YES completion:nil];
);

【讨论】:

我在创建UINavigationController 实例之前实际上已经尝试过,但会得到重复的错误日志:[CNUI ERROR] Contact view delayed appearance timed out 你实现CNContactViewControllerDelegate了吗? 我没有实现那个方法;谢谢 - 我用我添加的内容对问题进行了编辑;仍然收到相同的日志错误。 在***.com/questions/38748969/… 中有一条评论说这个错误是ios SDK 10 的新错误,因此需要将它放在UINavigationController 中。【参考方案2】:

问题最终是我错误地初始化了CNContactViewController...而不是:

CNContactViewController *contactController = [CNContactViewController viewControllerForUnknownContact:contact];

这将显示一个联系人,但不允许选择取消联系人视图或编辑它,正确的选项(对于我的场景)是使用

CNContactViewController *contactController = [CNContactViewController viewControllerForNewContact:contact];

【讨论】:

以上是关于无法编辑或关闭 CNContactViewController (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cpanel 的 phpmyadmin 中编辑或导出存储过程? [关闭]

任务栏总是显示所有图标无法折叠隐藏

CMD(命令提示符)无法进入桌面[关闭]

无法在 Mac OsX 上编辑 bash_profile [关闭]

只有登录用户才能编辑表单

编辑 UITextView 并在表格视图控制器中触摸键盘以外的任何位置时无法关闭键盘