Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用解析从通讯簿添加好友_Ios_Swift_Parse Platform_Addressbook_Relation - Fatal编程技术网

Ios 使用解析从通讯簿添加好友

Ios 使用解析从通讯簿添加好友,ios,swift,parse-platform,addressbook,relation,Ios,Swift,Parse Platform,Addressbook,Relation,我正在构建一个应用程序,在注册/登录时,它将浏览用户通讯簿,获取电话号码,在解析时对照用户类中的电话号码列进行检查,如果他们不是朋友,则添加他们 我在AddressBookHelper.swift中有一个功能来帮助获取电话号码: class AddressBookHelper: NSObject { let addressBook = AFAddressBookManager() static var addressBookData = AFAddressBookManager.allCon

我正在构建一个应用程序,在注册/登录时,它将浏览用户通讯簿,获取电话号码,在解析时对照用户类中的电话号码列进行检查,如果他们不是朋友,则添加他们

我在AddressBookHelper.swift中有一个功能来帮助获取电话号码:

class AddressBookHelper: NSObject {

let addressBook = AFAddressBookManager()

static var addressBookData = AFAddressBookManager.allContactsFromAddressBook()
static var contactsArray = [String]()

static func getContacts() -> [String] {

    var array = [String]()
    for contact in addressBookData{
        let phoneNumberArray = contact.numbers as! [String]
        for number in phoneNumberArray{ 
            array.append(number)  
        }
    }

    return array

}

}
然后在ParseHelper.swift中,我再次检查Parse User类:

static func lookUpUserFromAddressBook(addressBook: [String], completionBlock: PFArrayResultBlock) {

    for numbers in addressBook{
        let query = User.query()
        query!.whereKey("telephone", equalTo:numbers)
        query!.findObjectsInBackgroundWithBlock(completionBlock)
    }

}
最后,单击按钮时,我将用户添加为朋友(如果还不是朋友):

@IBAction func importContacts(sender: AnyObject) {

    ParseHelper.lookUpUserFromAddressBook(AddressBookHelper.getContacts())  {
        (results: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {

            if let objects = results as? [PFObject] {
                for object in objects {

                    let userObject = object as! User
                    self.matchedUsers.append(userObject)

                    let query = PFQuery(className: "Friends")
                    query.includeKey("toUser")
                    query.whereKey("fromUser", equalTo: User.currentUser()!)
                    query.findObjectsInBackgroundWithBlock {
                        (objects: [AnyObject]?, error: NSError?) -> Void in

                        if error == nil {
                            if (objects!.count == 0) {

                                ParseHelper.addFollowRelationshipFromUser(fromUser: User.currentUser()!, toUser: userObject, completionBlock: { (success, error) -> Void in


                                    if success{
                                        self.performSegueWithIdentifier("skipped", sender: self)
                                    }
                                    else{
                                        print("Error: \(error!) \(error!.userInfo)")

                                    }
                                })
                            }
                            else{
                                self.performSegueWithIdentifier("skipped", sender: self)
                            }

                        } else {
                            print("Error: \(error) \(error!.userInfo)")
                        }

                    }
                }
            }
        }
        else {
            print("Error: \(error!) \(error!.userInfo)")
        }

    }

}
我这样做对吗?它可以工作,但代码似乎有点长。有没有更简单的方法


提前感谢

您应该看看PFQuery的
whereKey:containedIn:
。这将返回所有用户的列表,这些用户的电话号码与您在数组中传递的任何号码匹配。这将大大减少检索用户联系人所需的查询数量

// Find users with any of these phone numbers
let numbers = ["1234567890", "1111111111", "222222222"]
query.whereKey("phoneNumber", containedIn: numbers)
从《解析iOS开发人员指南》中:

如果要检索与多个不同值匹配的对象,可以 可以使用whereKey:containedIn:,提供可接受的 价值观用单个查询替换多个查询通常很有用 询问


您还可以使用PFObject.saveAllInBackground()在一个查询中创建以下所有关系,它需要保存一个PFObjects数组。

是否更改此帮助?静态func lookUpUserFromAddressBook(addressBook:[String],completionBlock:PFArrayResultBlock){let query=User.query()query!。whereKey(“电话”,包含在:addressBook)query!。FindObjectsInBackgroundithBlock(completionBlock)}是的,这是一件有帮助的事情。