在我的应用程序中,我希望用户选择与peoplePicker的联系人。然后我想将记录ID存储在NSArray中,所以我必须将它转换为NSNumber。但是当将NSNumber添加到数组时,却没有。没有错误,但是当我查看调试器中的对象时,我看到,NSNumber personId
具有正确的值,但数组personAdd
不包含它。
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person {
NSNumber *personId = [NSNumber numberWithInt:ABRecordGetRecordID(person)];
NSString *first = (NSString *)ABRecordCopyValue(person,kABPersonFirstNameProperty);
NSString *last = (NSString *)ABRecordCopyValue(person,kABPersonLastNameProperty);
NSArray *personAdd = [NSArray arrayWithObjects:first, last, personId, nil];
[self.myContactDataSource addPerson:personAdd]; //further usage of the data
[self.tableView reloadData]; //reload table view and
[peoplePicker dismissModalViewControllerAnimated:YES]; //dismiss people picker
return NO; //tell peoplepicker not to display the contact details
}
有谁能告诉我如何解决这个问题?
答案 0 :(得分:1)
我自己没有在调试器中看到这一点,我能想到的唯一建议是尝试将personId放在数组中,然后检查第一个/最后一个是否为零。除此之外,老实说,我不知道为什么NSArray会拒绝NSNUmber。
答案 1 :(得分:1)
好的,假设第一个,最后一个和personId都不是零。 。
你说它在调试器中看起来不对 - 你的意思是什么?
如果您这样做会发生什么 - 您可以将控制台复制到您的问题中:
// Debug the person id
NSLog(@"%i", [personId intValue]);
// Check that it's in the array OK
NSLog(@"%i", [personAdd objectAtIndex:2]);
// Add it to your stuff
[self.myContactDataSource addPerson:personAdd];
// Check that the array is still OK
NSLog(@"%i", [[myContactDataSource objectAtIndex:2] intValue]);
我知道这不是一个答案,但它可能会对这个问题有所了解!
答案 2 :(得分:0)
如果第一个或最后一个是零,会发生什么?
NSArray *personAdd = [NSArray arrayWithObjects:first, last, personId, nil];
arrayWithObjects方法在它看到的第一个nil处停止 - 如果first或last为nil则它将永远不会添加personId :(