2015-01-01 34 views
1

我有一段代碼,我正在努力。我正在嘗試檢索聯繫人的縮略圖。我知道這可能不存在,但所以我試圖在它被分配之前檢查零。不知怎的,Xcode中仍然嘗試upwrap的零和我的程序保持與消息崩潰:試圖獲得iOS的地址簿聯繫圖片

致命錯誤:意外發現零而展開的可選值

這裏是我的代碼片段:

if UIImage(data: ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail).takeRetainedValue() as NSData) != nil { 

      pic = UIImage(data: ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail).takeRetainedValue() as NSData)! 

     } 

allPeople被定義爲:

var allpeople: [ABRecordRef] = ABAddressBookCopyArrayOfAllPeople(addressBook)?.takeRetainedValue() as [ABRecordRef] 

我不明白,是否有另一種方法來檢查沒有程序崩潰零?

+0

嘗試代碼一步一步,檢查'kABPersonImageFormatThumbnail).takeRetainedValue()作爲NSData'沒有返回零爲好。 – Emil

+0

此外,測試這個沒有更多的代碼,'allpeople'例如 – Emil

+0

我已經編輯它是很棘手的。 var allpeople:[ABRecordRef] = ABAddressBookCopyArrayOfAllPeople(addressBook)?。takeRetainedValue()as [ABRecordRef] – Lavvo

回答

0
let thumbnailData = ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail).takeRetainedValue() 
if thumbnailData != nil { 
    pic = UIImage(data: thumbnailData) 
} 
+0

我剛剛發佈我的解決方案,我只是想通過將該行分成多行來解決這個問題。看起來第一行是我搞砸的地方,ABPersonCopyImageDataWithFormat本身在沒有設置配置文件圖像的情況下在所有其他東西之前返回nil – Lavvo

1

剛剛發現了這一點。這是我做了什麼來解決我的問題。似乎第一行是我搞砸的地方,ABPersonCopyImageDataWithFormat本身在沒有設置配置文件圖像的情況下在所有其他東西之前返回nil。所以,它幫助我打破我行成小塊,像這樣:

var pic: UIImage = UIImage(named: "default-pic.png")! 
var picTemp1 = ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail)? 
     if picTemp1 == nil{ 
      println("NIL FOUND") 
     } 
     else{ 
      println("PICTURE FOUND") 
      var picTemp2: NSObject? = Unmanaged<NSObject>.fromOpaque(picTemp1!.toOpaque()).takeRetainedValue() 
      if picTemp2 != nil { 
       pic = UIImage(data: picTemp2! as NSData)! 
      } 
     } 
相關問題