gpt4 book ai didi

ios - 使用 Parse 从通讯录添加好友

转载 作者:行者123 更新时间:2023-11-28 07:01:48 26 4
gpt4 key购买 nike

我正在构建一个应用程序,在注册/登录时,它将遍历用户地址簿,获取电话号码,检查 Parse 上用户类中的电话号码列,如果他们不是 friend ,然后添加它们。

我在 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)
}

}

最后,当点击按钮时,我将用户添加为 friend ,如果还不是 friend 的话:

@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)

来自 Parse iOS 开发者指南: https://parse.com/docs/ios/guide#queries

If you want to retrieve objects matching several different values, you can use whereKey:containedIn:, providing an array of acceptable values. This is often useful to replace multiple queries with a single query.

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

关于ios - 使用 Parse 从通讯录添加好友,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31845058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com