在我正在编写的应用程序中,我允许用户将联系人与事件联系起来。他们可以使用地址簿UI框架添加新的或现有的联系人。
一旦将联系人关联起来,就会显示它们,用户可以单击它们来打开ABPersonViewController。编辑工作正常,但当person视图关闭时,更改将不会保存。
以下是相关代码:
ABPersonViewController *personController = [[ABPersonViewController alloc] init];
personController.personViewDelegate = self;
personController.allowsEditing = YES;
personController.displayedPerson
[self.navigationController pushViewController:personController animated:YES];
[personController release];编辑联系人并关闭“人员”视图后,如果再次单击“联系人”,则不存在任何已更改的信息。
我尝试创建一个ABAddressBookRef属性,并使用
personController.addressBook = ab;然后保存地址簿,但也不起作用。
编辑:
我已经实现了<ABPersonViewControllerDelegate>。它只有一个方法,如果我记得正确的话,实现失败会使ABPersonViewController根本无法工作。
以下是我的充分实施:
- (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
return YES;
}据我所知,这只是意味着控制器将正常运行。
编辑2:
好的,所以我刚刚意识到控制器除了显示他们的名字之外,并没有显示任何关于被选中的人的信息。我认为这意味着我的ABRecordRefs在某种程度上是不正确的。我会调查的。
我将联系人存储为包含记录ID的NSNumbers数组。下面是我的代码(contactID是记录ID的数组,ab是ABAddressBookRef):
NSMutableArray *contactArray = [NSMutableArray array];
for (NSNumber *contactNumber in contactIDs) {
NSInteger contactID = [contactNumber intValue];
[contactArray addObject:ABAddressBookGetPersonWithRecordID(ab, contactID)];
}这看起来很有效,因为当我选择一个联系人时,会加载正确的名称。但是,不显示任何其他信息。
发布于 2011-06-30 06:04:04
我让它起作用了。问题是我使用的是两个不同的ABAddressBookRefs。
我使用一个ABRecordRefs创建了一个ABAddressBookRef数组(在编辑的问题中可以看到),但是当我从数组中读取ABRecordRef时,我使用的ABAddressBookRef已经发布了。
我使ABAddressBookRef实例在整个类实例的整个生命周期中持续存在,并且起了作用。
发布于 2011-06-30 04:48:15
您需要设置所有地址簿委托方法来解决此问题。去这个链接
发布于 2011-06-30 05:05:06
您是如何创建AddressBook的?你用过ABAddressBookCreate()吗
此外,您应该确保正确地实现ABPersonViewControllerDelegate。
请查看这个示例http://developer.apple.com/library/ios/#samplecode/QuickContacts/Introduction/Intro.html
我相信它包含了你所需要的一切!
ABAddressBookSave更新您应该尝试使用方法!
干杯,
汤格
https://stackoverflow.com/questions/6529906
复制相似问题