views:

36

answers:

1

Using Core Data. Let's say we have models for Team and Player.

Assume: -Each player is a member of a single team -Relevant relationships have been made in a xcdatamodel file.

I have a TeamListViewController (listing all teams), when I select a team I want to see a list of just those players related to that selected team on the PlayerListViewController.

I then want to be able to select an individual player and see PlayerViewController and review their personal information, edit details etc.

I know how to use the fetchResultsController to pull in a list of all players.

  1. How do I best go about pulling in the data needed to show just the players for the selected team?

  2. Also, If I just pull the data into an Array so I can display it, how do I also ensure that the array remains in sync with core data when other changes are made to a record?

+2  A: 

What you need to fetch objects matching certain criteria is a NSPredicate.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"team=Tigers"];
[fetchRequest setPredicate:predicate];

Now the fetch request returns results where the team attribute = "Tigers". Without the predicate it would return all objects.

Predicates can get complex - you can have multiple conditions and special operators are defined like "ANY" or "LIKE". See the Predicate Programming Guide

On your second question - do you anticipate accessing the Core Data store with multiple threads? Start reading... you need a managed object context for each thread. If not you basically don't need to worry. Changes to the underlying store are "faulted in" just as if you follow a relationship to an object you have not explicitly fetched.

Adam Eberbach
Awesome thanks so much, that was so much easier then I thought it would be.> Do you anticipate accessing the Core Data store with multiple threads? No, with the above we now don't need to look at creating a separate array and are just relying on the improved fetch request.
Evolve