【发布时间】:2016-03-30 07:49:38
【问题描述】:
我在视图控制器中加载电话联系人时遇到了小问题,我成功地在Tableview 中加载了我的电话联系人,其中包含姓名和号码,但是联系人随机加载姓名,我希望联系人姓名必须是字母顺序,等于号码
这是我的示例代码:
func contactDetail () {
var myPhValue:NSString!
var myPBfirstname:NSString!
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
let addressBook : ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
ABAddressBookRequestAccessWithCompletion(addressBook, { (granted : Bool, error: CFError!) -> Void in
if granted == true {
let allContacts : NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue()
for contactRef:ABRecordRef in allContacts { // first name
myPBfirstname = ABRecordCopyValue(contactRef, kABPersonFirstNameProperty)?.takeRetainedValue() as! NSString? ?? ""
let myPBlastname = ABRecordCopyValue(contactRef, kABPersonLastNameProperty)?.takeRetainedValue() as! NSString? ?? ""
let phonesRef: ABMultiValueRef = ABRecordCopyValue(contactRef, kABPersonPhoneProperty)?.takeRetainedValue() as ABMultiValueRef? ?? ""
var phonesArray = Array<Dictionary<String,String>>()
for var i:Int = 0; i < ABMultiValueGetCount(phonesRef); i++ {
let myPhLabel = ABMultiValueCopyLabelAtIndex(phonesRef, i)?.takeRetainedValue() as NSString? ?? ""
myPhValue = ABMultiValueCopyValueAtIndex(phonesRef, i)?.takeRetainedValue() as! NSString? ?? ""
if myPhLabel.containsString("Mobile") {
}
}
let nameString = " "+(myPBlastname as String)
let nameValues = (myPBfirstname as String)+(nameString as String)
let contactDict : Dictionary = ["name": nameValues,"phone":myPhValue]
self.contactArray.addObject(contactDict)
if self.contactArray.count == 0 {
NSLog("contactValue is Zero")
}
else{
NSLog("count Value %d", self.contactArray.count)
}
}
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.contactTable.hidden = false
self.contactTable.reloadData()
})
})
})
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return contactArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell:UITableViewCell = self.contactTable.dequeueReusableCellWithIdentifier("cell") as UITableViewCell!
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.preservesSuperviewLayoutMargins = false
cell.separatorInset = UIEdgeInsetsZero
cell.layoutMargins = UIEdgeInsetsZero
cell.textLabel!.text = contactArray.valueForKey("name").objectAtIndex(indexPath.row) as? String
return cell
}
【问题讨论】:
-
对phonesArray进行排序,然后在tableview中显示。
-
这是 Swift 4 的正确答案 - stackoverflow.com/questions/34851296/…