سؤال

In a tutorial i'm learning CoreData from the preform something like this to fetch the collection of notes in a notes app:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Note"];

    self.notes = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    [self.tableView reloadData];
}

So first of all, notes is an NSMutableArray, so tell me if I understand it right:

  1. they creating an NSManagedObjectContext object to hold the context.

  2. they create a request to get the "Note" entity from the database file.

  3. they use the managedObjectContext to call executeFetchRequest with the requested request (which is fetchRequest). Now here is the part I dont completely understand (probably some of the previous ones as well, please correct me if I didn't):

The type of object i'm getting from this call [managedObjectContext executeFetchRequest:fetchRequest error:nil]; is an NSSet? and by calling mutableCopy i'm returning an array?

Thanks

هل كانت مفيدة؟

المحلول

[managedObjectContext executeFetchRequest:fetchRequest error:nil]

returns an (immutable) NSArray, and mutableCopy creates a - well - mutable copy of that array. It does not copy the managed objects in the array or the context. It just allows you to modify self.notes, e.g. to add, delete or rearrange the objects in the mutable array.

Remark: If you display objects from a Core Data fetch request in a table view then you should have a look at NSFetchedResultsController. It might look a bit more complicated at the beginning, but allows (for example) automatic updates of the table view if objects are inserted, deleted or modified.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top