我需要一些使用APAddressBook的帮助。
我无法理解如何使用APAddressBook加载和显示联系人。
我认为此功能可以从地址簿获取所有联系人
func loadContacts() {
self.addressBook.loadContacts({
(contacts: [APContact]?, error: NSError?) in
if let unwrappedContacts = contacts {
print(unwrappedContacts)
} else {
// show error...
此函数提取名称
func contactName(contact :APContact) -> String {
if let firstName = contact.name?.firstName, lastName = contact.name?.lastName {
return "\(firstName) \(lastName)"
}
else if let firstName = contact.name?.firstName {
return "\(firstName)"
}
else if let lastName = contact.name?.lastName {
return "\(lastName)"
}
else {
return "Unnamed contact"
}
}
我不明白如何在这里显示这些名称:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("contacts", forIndexPath: indexPath) as! ContactsTableViewCell
// Configure the cell...
cell.contactsNumberLabel.text = contactsListNumbers[indexPath.row]
cell.contactsNameLabel.text = contactListNames[indexPath.row]
return cell
}
答案 0 :(得分:0)
我对此库不太确定但是我们可以看到unwrappedContacts
是一个数组,其中包含有关联系簿中每个用户的所有信息。所以我们最好的选择是迭代这个数组,然后将其分解,然后将其分配给新的数组。
根据一些研究,我做了它说这个库包含少数字段,如
可用字段: APContactFieldFirstName - 联系名字 APContactFieldMiddleName - 联系中间名 APContactFieldLastName - 联系姓氏 APContactFieldCompany - 联系公司(组织) APContactFieldPhones - 联系电话阵列
struct ContactStructure
{
var firstname:String?
var lastname:String?
}
var arrayOfContacts = [ContactStructure]()
for each in unwrappedContacts
{
var firstname = each.APContactFieldFirstName as! String
var lastname = each.APContactFieldLastName as! String
var SingleContact = ContactStructure()
singleContact.firstname = firstname
singleContact.lastname = lastname
arrayOfContacts.append(SingleContact)
// Then reloadData of the tableView
}
注意每个都是数组中的单个对象,因此当您执行each.
时,您应该查看此类或结构所包含的方法和属性
然后,您将使用arrayOfContacts
填充tableview的单元格
答案 1 :(得分:0)
这是我的完整代码:
class ContactsTableViewController: UITableViewController {
let addressBook = APAddressBook()
struct ContactStructure {
var firstname:String?
var lastname:String?
}
var arrayOfContacts = [ContactStructure]()
override func viewDidLoad() {
super.viewDidLoad()
loadContacts()
}
func loadContacts() {
self.addressBook.loadContacts({
(contacts: [APContact]?, error: NSError?) in
if let unwrappedContacts = contacts {
for each in unwrappedContacts {
let firstname = each.name?.firstName
let lastname = each.name?.lastName
var singleContact = ContactStructure()
singleContact.firstname = firstname
singleContact.lastname = lastname
self.arrayOfContacts.append(singleContact)
}
} else if let unwrappedError = error {
let alert = UIAlertView(title: "Error", message: unwrappedError.localizedDescription,
delegate: nil, cancelButtonTitle: "OK")
alert.show()
}
})
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// for now 1 should be fine
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ContactsTableViewCell
//Here I get error Cannot subscript a value of type '[ContactsTableViewController.ContactStructure]'
cell.nameLabel.text = arrayOfContacts[indexPath.row]
return cell
}