Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS

Help with looping through array in a loop

I am trying to get a list of numbers from the address book. I am then trying to get all users from parse.com that match the numbers found in the address book. In other words, I am trying to pull down all the users that someone would know / has stored in their address book ... using the mobile as the identifier.

I have it half working, but it appears to loop over and over until all checked and I end up with only 1 result in my view.

If anyone is able to help me re-factor how I am supposed to combine these things and alter my query or indeed offer best practice I would be most appreciative :)

    ////////////////////////////////////////////
    // load up all the numbers for the user

    CFErrorRef *error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);

    for(int i = 0; i < numberOfPeople; i++) {

        ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );

        //NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
        //NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
        //NSLog(@"Name:%@ %@", firstName, lastName);

        ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);

        for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) {
            NSString *phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i);


    NSLog(@"the number%@", phoneNumber);


    PFQuery *query = [PFUser query];
    [query whereKey:@"mobile" equalTo:phoneNumber];
    [query orderByAscending:@"username"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        if (error) {
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }

        else {

            self.allUsers = objects;
            [self.tableView reloadData];

        }

    }];

    self.currentUser =[PFUser currentUser];



        }
    }


}

1 Answer

Amit Bijlani
STAFF
Amit Bijlani
Treehouse Guest Teacher

Why not try the following:

  1. Build an array of phone numbers, let's call it phoneNumbers.
  2. Download a list of all users from Parse, let's call it users.
  3. Loop through all the users and create a new array called friends. Only add objects to the friends if their phone number exists in the phoneNumbers array using the containsObject method.