2015-10-11 31 views
3

我似乎無法讓CNContactPicker正常工作。我已經觀看並重新查看了WWDC會話223.它看起來像選擇器的iOS版本,您設置了一個謂詞來啓用聯繫人以進行選擇,但OS X版本沒有相應的選項。據我所知,如果您的委託支持contactPicker(選擇器:CNContactPicker,didSelectContact聯繫人:CNContact),並且您不提供任何顯示的鍵,選擇器將被配置爲選擇聯繫人。這裏是示例代碼。當我使用這個時,聯繫人全部變灰並且委託方法從不被調用。CNContactPicker - 所有聯繫人灰顯

在此先感謝

func selectContact() { 

    let contactStore = CNContactStore( 
    contactStore.requestAccessForEntityType(CNEntityType.Contacts, completionHandler:{(bool: Bool, error: NSError?) -> Void in 
     print("access granted = \(bool)") 
    }) 

    let contactPicker = CNContactPicker() 
    contactPicker.delegate = self 
    contactPicker.showRelativeToRect(NSRect(x: 0, y: 0, width: 200, height: 500), ofView: view, preferredEdge: NSRectEdge.MinX) 

} 

//Delegate method 
func contactPicker(picker: CNContactPicker, didSelectContact contact: CNContact) { 
    print(contact) 
} 
+0

您有權限訪問嗎? (並不是說這很重要;在iOS上,你不需要訪問來使用選擇器。) – matt

+0

另一種可能性是這件事情剛剛破裂。很多聯繫人UI的東西在iOS上壞了,爲什麼OS X要分擔痛苦呢? :) – matt

+0

當我運行這個,打印命令返回true。我有這個來驗證它不是一個訪問問題。有趣的是很多聯繫人界面的東西被破壞;這讓我覺得目前可能沒有解決方案:| –

回答

2

這似乎是一個內存管理問題與CNContactPicker。我設法保持在外部範圍的引用來得到這個工作:

let picker = CNContactPicker() 

@IBAction func import(sender: NSButton) { 
    picker.delegate = self 

    let contactStore = CNContactStore() 
    contactStore.requestAccessForEntityType(CNEntityType.Contacts, completionHandler:{(bool: Bool, error: NSError?) -> Void in 
     print("access granted = \(bool)") 
     if bool { 
      dispatch_async(dispatch_get_main_queue()) { 
       self. picker.showRelativeToRect(sender.frame, ofView: sender.superview ?? self.view, preferredEdge: .MaxY) 
      } 
     } 
    }) 
} 

func contactPicker(picker: CNContactPicker, didSelectContact contact: CNContact) { 
    picker.close() 
    print("Chose contact \(contact)!") 
} 

注意,一切看起來還是灰色的(也許它應該像她那樣?),但至少在委託方法被調用。

+0

謝謝!我敢打賭,他們在Mac上的API中忘記了一些謂詞。在iOS中,您似乎設置了謂詞以使它們不會變灰。 –

0

我只是碰到了同樣的問題。在做一些研究之後,您可以啓用哪些聯繫人可用,哪些不可用。

看看這個,predicateForEnablingContact從蘋果公司的文件 apple documentation

下面是代碼,我如何使用它的一個片段。

contactPickerViewController.predicateForEnablingContact = NSPredicate(format: "[email protected] > 0")

+0

是的,這可以在UIKit中使用,但是在AppKit中,CNContactPicker類對應物似乎沒有等效的predicateForEnablingContact屬性。這幾乎就像他們忘了在AppKit中建立它。 –

相關問題