2015-08-02 2 views
0

Сегодня проблема была уловлена.Заберите число человек из AddressBook и сравните его с Parse DB

Я использую DigitsKit + Parse, DigitsKit для пользовательской проверки подлинности и анализа в качестве полезной структуры, чтобы упростить использование sinUp, login и т. Д. Для пользователей и меня.

Вот как это работает:

  1. Пользователи введите свой PHONENUMBER и пароль в TextField

  2. После этого DigitsKit проверки с SMS и короткий код, который пользователь реален, смс пришла к USER и он/она набирает его в валидации textField. ЕСЛИ все в порядке -> имя пользователя и пароль хранятся в . Разбирайте DB как PFUser.

    имя пользователя (в ParseDB) = user'sMobilePhone (в TextField)

  3. Чем после регистрации и авторизации пользователя нажать на кнопку «FindFriends» на новый взгляд и здесь должны быть друг-поисковую систему, но у меня есть проблема здесь ... Посмотрите случай для контроллера ниже, пожалуйста:

    import UIKit 
    import SwiftAddressBook 
    import AddressBook 
    import Parse 
    
    class FriendsViewController: UIViewController { 
    let status : ABAuthorizationStatus = SwiftAddressBook.authorizationStatus() 
    
        var addrssbk : ABAddressBook! 
    var addressBook: SwiftAddressBook? = swiftAddressBook 
    
    
    override func viewDidLoad() { 
        super.viewDidLoad() 
        GetContactNumbers() 
          } 
    
    
    
    override func viewDidAppear(animated: Bool) { 
    
    
    } 
    
    
    
    
    
    
    func createAddressBook() -> Bool { 
    if self.addressBook != nil { 
        return true 
    } 
    var err : Unmanaged<CFError>? = nil 
    let addrssbk : ABAddressBook? = ABAddressBookCreateWithOptions(nil, &err).takeRetainedValue() 
    if addrssbk == nil { 
        println(err) 
        self.addressBook = nil 
        return false 
    } 
    self.addrssbk = addrssbk 
    return true 
    } 
    
        func determineStatus() -> Bool { 
    let status = ABAddressBookGetAuthorizationStatus() 
    switch status { 
    case .Authorized: 
        return self.createAddressBook() 
    case .NotDetermined: 
        var ok = false 
        ABAddressBookRequestAccessWithCompletion(nil) { 
         (granted:Bool, err:CFError!) in 
         dispatch_async(dispatch_get_main_queue()) { 
          if granted { 
           ok = self.createAddressBook() 
          } 
         } 
        } 
        if ok == true { 
         return true 
        } 
        self.addressBook = nil 
        return false 
    case .Restricted: 
        self.addressBook = nil 
        return false 
    case .Denied: 
        self.addressBook = nil 
        return false 
    } 
    } 
    
    
    func GetContactNumbers() { 
    
    swiftAddressBook?.requestAccessWithCompletion({ (success, error) -> Void in 
        if success { 
         if let people = swiftAddressBook?.allPeople { 
          for person in people { 
           if let numbers = person.phoneNumbers { 
             let names = person.compositeName 
            NSLog("%@", numbers.map({$0.value})) 
            NSLog("%@", names!) 
    
    
    
            if let query = PFUser.query() { 
    
             query.whereKey("username", equalTo: "\(person.phoneNumbers)") 
             var friends = query.findObjects() 
             println(friends) 
            } 
    
    
    
           //the value entry of the multivalue struct contains the data 
    
           } 
          } 
         } 
         //do something with swiftAddressBook 
    
        }else { 
         //no success. Optionally evaluate error 
        } 
    }) 
    
    
    } 
    
    
    
    override func didReceiveMemoryWarning() { 
        super.didReceiveMemoryWarning() 
        // Dispose of any resources that can be recreated. 
    } 
    
    
    
    } 
    

Я не могу взять каждый PHONENUMBER и сравнить его с именем пользователя в ParseDB, любые предложения, как я должен надеть это ? Или любые хиты/решения?

PS, у меня есть проблемы с kind'a массивов, словарей и других типов массива/ключ-значение данных и петли, а также, так что любая помощь будет совершенным

+0

Возможно, проблема связана с тем, что в ParseDB формат номера отличается от AddressBook? –

ответ

0

решаемая проблема с использованием карты и stringFormation:

func GetContactNumbers() { 

     let query = PFUser.query() 

     swiftAddressBook?.requestAccessWithCompletion({ (success, error) -> Void in 
      if success { 
       if let people = swiftAddressBook?.allPeople { 
        for person in people { 
         if let numbers = person.phoneNumbers { 
          let names = person.compositeName 
          let formatednumbers = numbers.map { $0.value.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).reduce("", combine: {$0+$1})} 
//       NSLog("%@", numbers.map({$0.value})) 
          NSLog("%@", names!) 
          println(formatednumbers) 
          query!.whereKey("username", equalTo: "\(formatednumbers)") 

          if let friends = query!.findObjects() { 
           println(friends) 

          } 





         //the value entry of the multivalue struct contains the data 

         } 
        } 
       } 
       //do something with swiftAddressBook 

      }else { 
       //no success. Optionally evaluate error 
      } 
     }) 


    }