2015-09-06 51 views
1

我试图让使用下面的代码触点崩溃:应用程序同时从iPhone获取联系人号码在SWIFT

var addressBook: ABAddressBook! 
let addressBookRef: ABAddressBook = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue() 

var arrContacts = [""] 
var personNameContactNo:[String: String] = ["":""] 
var arrOfDictContacts = NSMutableArray() 
var Name: String! 

    if let people = ABAddressBookCopyArrayOfAllPeople(addressBook)?.takeRetainedValue() as? NSArray { 

     for person in people{ 
      if let name = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as? String { 
       Name = name 
      } 
      let numbers:ABMultiValue = ABRecordCopyValue(
       person, kABPersonPhoneProperty).takeRetainedValue() 
      var number = ABMultiValueCopyValueAtIndex(numbers,0).takeRetainedValue() as! String 

      println("number = \(number)") 

      if(number.isEmpty) { 
       println("empty") 
      } else { 
       personNameContactNo.removeAll(keepCapacity: true) 
       personNameContactNo.updateValue(number, forKey:Name) 
       arrOfDictContacts.addObject(personNameContactNo) 
      } 
      println(personNameContactNo) 
     } 
     println(arrOfDictContacts) 
    } 

what am expecting is: ["Arun":"123455"], ["John":"23456122"], etc... 

它运行在模拟器不错,但不是在设备上。也许这是由于一些零价值。 应用崩溃与以下信息:fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

Crashing Image

+0

你能指定你的代码在哪一行崩溃吗? – Shoaib

+0

我不知道在哪一行,它没有在崩溃时指向 – AAA

+0

尝试在我的答案中发布的代码。 – Shoaib

回答

2

尝试;这应该可以解决你的问题。

var addressBookRef: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue() 

var arrOfDictContacts:NSMutableArray = NSMutableArray() 

let people:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBookRef).takeRetainedValue(); 

for person in people{ 
     if let name:String = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as? String { 
      let numbers:ABMultiValue = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() 

//    if (ABMultiValueGetCount(numbers) > 0) { //This condition is optional because using '?' before calling takeRetainedValue 
       if let number:String = ABMultiValueCopyValueAtIndex(numbers,0)?.takeRetainedValue() as? String { 
        println("number = \(number)"); 
        arrOfDictContacts.addObject(["\(name)":"\(number)"]); 
       } 
//    } 
     } 
} 
//-- 
println(arrOfDictContacts); 
+0

@Shoib仍然崩溃,同样的错误。在问题中添加屏幕截图 – AAA

+0

@AAA我已更新我的帖子。如果它仍然崩溃,则使用断点来查找实际代码崩溃的行。 – Shoaib

+0

好的,该应用程序既不崩溃也不提取​​任何联系人。 'arrOfDictContacts'为空 – AAA

相关问题