Julliard
Julliard

Reputation: 553

loop in a loop not working

I'm working on an app for school project.

After accessing the user's contacts, I want to loop through and show only the contacts who are also users of the app. *Their username is their mobile number.

below are 3 functions.

the first one getAppUsers() works fine.

the third one getDisplayedUser() does not work. and i wonder why

the second one getUserContacts() works. but it is only there to check which part of my loop isn't working. :/

so apparently my loop in a loop has something wrong which i can't figure out (it didn't even get to the "you're HERE"). please help me out. THANKS!

var appUsers = [String]()
var contactStore = CNContactStore()
var userContacts = [CNContact]()
var displayedContacts = [name: phoneNumber]()


func getAppUsers() {
    let appUsersQuery = PFUser.query()
    appUsersQuery?.findObjectsInBackground { (objects, error) in
        if error != nil {
            print("WTF")
        } else if let users = objects {
            for object in users {
                print("FYEAH!")
                if let user = object as? PFUser {
                    self.appUsers.append(user.username!)
                    print(user.username)
                }
            }
        }
    }
}

func getUserContacts() {
    for b in userContacts {
        let c = (b.phoneNumbers[0].value).stringValue
        let d = c.replacingOccurrences(of: "\\D", with: "", options: .regularExpression, range: c.startIndex..<c.endIndex)
        print("you got here")
        print(d)
    }
}

func getDisplayedUser() {
    for a in appUsers {
        for b in userContacts {
            let c = (b.phoneNumbers[0].value).stringValue
            let d = c.replacingOccurrences(of: "\\D", with: "", options: .regularExpression, range: c.startIndex..<c.endIndex)
            print("you're HERE")
            print(d)
            if a == d {
                print("FOUND IT")
                print(b.givenName + " " + b.familyName)
            }
        }
    }
}

Upvotes: 0

Views: 88

Answers (1)

xmhafiz
xmhafiz

Reputation: 3538

The getDisplayedUser should be call after the loop finished in in getAppUsers because it is executing in asynchronous mode. I added the row after finished loop below

func getAppUsers() {
    let appUsersQuery = PFUser.query()
    appUsersQuery?.findObjectsInBackground { (objects, error) in
        if error != nil {
            print("WTF")
        } else if let users = objects {
            for object in users {
                print("FYEAH!")
                if let user = object as? PFUser {
                    self.appUsers.append(user.username!)
                    print(user.username)
                }
            }

            // Call it here please ..
            self.getDisplayedUser()
        }
    }
}

Upvotes: 1

Related Questions