Я изучаю основные данные с помощью книги. Есть код:
- (void)loadData {
// Pull the movies. If we have 200, assume our db is set up.
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Movie"
inManagedObjectContext:context]];
NSArray *results = [context executeFetchRequest:request error:nil];
if ([results count] != 200) {
// Add 200 actors, movies, and studios
for (int i = 1; i <= 200; i++) {
[self insertObjectForName:@"Actor" withName:
[NSString stringWithFormat: @"Actor %d", i]];
[self insertObjectForName:@"Movie" withName:
[NSString stringWithFormat: @"Movie %d", i]];
[self insertObjectForName:@"Studio" withName:
[NSString stringWithFormat: @"Studio %d", i]];
}
// Relate all the actors and all the studios to all the movies
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Movie"
inManagedObjectContext:context]];
NSArray *results = [context executeFetchRequest:request error:nil];
for (NSManagedObject *movie in results) {
[request setEntity:[NSEntityDescription entityForName:@"Actor"
inManagedObjectContext:context]];
NSArray *actors = [context executeFetchRequest:request error:nil];
NSMutableSet *set = [movie mutableSetValueForKey:@"actors"];
[set addObjectsFromArray:actors];
[request setEntity:[NSEntityDescription entityForName:@"Studio"
inManagedObjectContext:context]];
NSArray *studios = [context executeFetchRequest:request error:nil];
set = [movie mutableSetValueForKey:@"studios"];
[set addObjectsFromArray:studios];
}
}
[request release];
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
Основной вопрос: нужно ли обновлять указатель контекста, если в этом контексте произошли какие-либо изменения?
Что я имею в виду: я получаю указатель на контекст в начале метода, затем в цикле я беру этот контекст и вставляю туда управляемые объекты (-insertObjectForName: withName :). Затем я вижу это обновление указателя контекста и задаю вопрос: это какое-то правило, и я должен действовать так же, или это просто не очень аккуратный пример кода? Почему я не могу использовать старый указатель?
--- Edit --- Еще один вопрос: это легальная инициализация запроса здесь в коде:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
...
NSFetchRequest *request = [[NSFetchRequest alloc] init];
...
[request release];
Два распределения и только один выпуск?