首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用iPhone联系方式检索电子邮件?

如何使用iPhone联系方式检索电子邮件?
EN

Stack Overflow用户
提问于 2015-11-07 06:17:47
回答 1查看 3.9K关注 0票数 0

我对斯威夫特很陌生。我使用APAdressBook框架检索iPhone .Every中的联系人,工作正常到IOS8.4,但是在模拟器和iPhone设备的IOS 9中,它没有访问联系人,甚至没有显示警告信息,比如您想访问联系人吗?如果是,请给我有价值的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-07 07:48:42

苹果公司( Apple .)从iOS 9中引入了iOS,因此,更好地使用这个框架来检索联系人。

以下是从联系人应用程序中获取电子邮件或整个联系人的方法。

Contacts.framework添加到项目中。

创建或添加类型为header的新文件,并给出名称,如yourProjectName-Bridging-Header.h,将#import <Contacts/Contacts.h>语句写入文件,并从构建设置中保存和设置该文件的适当路径。

现在创建方法

代码语言:javascript
复制
func getAllContacts() {

    let status = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contacts) as CNAuthorizationStatus

    if status == CNAuthorizationStatus.Denied {

        let alert = UIAlertController(title:nil, message:"This app previously was refused permissions to contacts; Please go to settings and grant permission to this app so it can use contacts", preferredStyle:UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title:"OK", style:UIAlertActionStyle.Default, handler:nil))
        self.presentViewController(alert, animated:true, completion:nil)
        return
    }

    let store = CNContactStore()
    store.requestAccessForEntityType(CNEntityType.Contacts) { (granted:Bool, error:NSError?) -> Void in

        if !granted {

            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                // user didn't grant access;
                // so, again, tell user here why app needs permissions in order  to do it's job;
                // this is dispatched to the main queue because this request could be running on background thread
            })
            return
        }

        let arrContacts = NSMutableArray() // Declare this array globally, so you can access it in whole class.

        let request = CNContactFetchRequest(keysToFetch:[CNContactIdentifierKey, CNContactEmailAddressesKey, CNContactBirthdayKey, CNContactImageDataKey, CNContactPhoneNumbersKey, CNContactFormatter.descriptorForRequiredKeysForStyle(CNContactFormatterStyle.FullName)])

        do {

            try store.enumerateContactsWithFetchRequest(request, usingBlock: { (contact:CNContact, stop:UnsafeMutablePointer<ObjCBool>) -> Void in

                let arrEmail = contact.emailAddresses as NSArray

                if arrEmail.count > 0 {

                    let dict = NSMutableDictionary()
                    dict.setValue((contact.givenName+" "+contact.familyName), forKey: "name")
                    let emails = NSMutableArray()

                    for index in 0...arrEmail.count {

                        let email:CNLabeledValue = arrEmail.objectAtIndex(index) as! CNLabeledValue
                        emails .addObject(email.value as! String)
                    }
                    dict.setValue(emails, forKey: "email")
                    arrContacts.addObject(dict) // Either retrieve only those contact who have email and store only name and email
                }
                arrContacts.addObject(contact) // either store all contact with all detail and simplifies later on
            })
        } catch {

            return;
        }
    }
}

在需要self.getAllContacts()的地方调用此方法

当你想要找回

代码语言:javascript
复制
for var index = 0; index < self.arrContacts.count; ++index {

            let dict = self.arrContacts[index] as! NSDictionary
            print(dict.valueForKey("name"))
            print(dict.valueForKey("email"))
        }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33579794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档