2014-09-26 52 views
2
ABPersonViewController *personController = [[ABPersonViewController alloc] init]; 
personController.personViewDelegate = self; 
ABRecordRef person = ABAddressBookGetPersonWithRecordID(personController.addressBook, [recordID intValue]); 
personController.displayedPerson = person; 
personController.allowsEditing = YES; 
personController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back",nil) style:UIBarButtonItemStylePlain target:self action:@selector(returnFromPersonView)] ; 
personController.navigationController.navigationBarHidden = NO; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:personController]; 
navController.navigationBar.tintColor=[UIColor colorWithRed:27/255.0 green:27/255.0 blue:29/255.0 alpha:1.0]; 
[self presentViewController:navController animated: YES completion:nil]; 

获取碰撞在此行personController.displayedPerson =人;作为 [不是一个类型的挽留]:消息发送到释放实例iOS8上碰撞[不是一个类型挽留]:消息发送到释放的实例

+0

使用的仪器,使僵尸工具!通过这种方式,您可以看到在dealloc调用之后发送了什么对象,以及哪些是版本 – 2014-12-10 20:25:50

回答

1

尝试从控制器获取通讯录没有,但明确的创建它来代替:

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &err); 
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, [recordID intValue]); 
+0

我没有看到如何创建地址簿将会对此有所帮助 - 该人员将返回保留(Get)名称。 - 仍然值得一试:) – 2014-12-10 20:24:56

+0

@ Daij-Djan我不太确定为什么,但这个工程。它在第一个(原始)案例中给了我EXC_BAD_ACCESS,并且与这个一起工作。可能这是因为在这个阶段'addressBook'属性没有正确创建。从文档:[_未取消设置时,将创建一个地址簿并在需要时分配给此属性。](https://developer.apple.com/library/ios/documentation/AddressBookUI/Reference/ABPersonViewController_Class/index.html# // apple_ref/occ/instp/ABPersonViewController/addressBook),所以不清楚它何时会被创建。 – dmirkitanov 2014-12-10 20:46:53

+0

听起来合理 – 2014-12-10 21:32:23

相关问题