Я пытаюсь сохранить маршрут путешествия в основных данных, и вот моя модель данных.У меня есть сущность Координата , поддерживающая двойную широту и долготу, затем я создал Локализуемую сущность и установил связь между этими двумя сущностями.
Coordinate <-> Locatable
тогда у меня есть POI объект, унаследованный Locatable эти POI , представляющие мой маршрут.наконец, у меня есть пункт назначения унаследованная сущность POI , использующая в качестве пункта назначения
Coordinate <-> Locatable
|
V
POI
|
V
Destination
Мой Маршрут класс имеет точки как один ко многимсвязь с этими POI и пункт назначения как один к одному с Пункт назначения .Проблема возникает, когда я пытаюсь получить свою коллекцию POI для создания маршрута с помощью MKPolylineView, когда я вызываю route.points, я также получаю точку назначения с этими POI.Я знаю, что базовые данные создают большие Locatable как для POI, так и для пункта назначения, но это поведение не логично, моя точка назначения не должна отображаться с точками.Это правильное поведение или я что-то упустил.
Довольно сложно объяснить, если я пропустил какую-то важную информацию, пожалуйста, скажите мне.
Обновлено для уточнения
У меня есть объект Маршрут с одним-одним-одним с пунктом назначения в качестве пункта назначения и один-ко-многим с точками интереса в качестве точек (которые я использую в качестве пути путешествия)
Когда я добавляю пункт назначения
route.destination = destination_obj
он также отображается в
route.points
, что неверно, поскольку эти два свойства служат двум различным целям (одно для создания пути перемещения, другое для предварительного вычисления некоторых данных).У этого поведения есть какой-либо документ или объяснение?
Добавлена небольшая модель данных и пример кода, чтобы каждый мог воспроизвести эту Сделать 3 сущность
Family
- int generation
- parents as to-may relation to Parent and family as inverse
- child as to-one relation to Child and family as inverse
Parent
- String name
- family to-one relation to Family
Child : Parent
Вот мой код
Family *fam;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Family" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSArray *meters = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
if ([meters count] > 0) {
NSLog(@"found");
fam = [meters lastObject];
fam.generation = [NSNumber numberWithInt:[fam.generation intValue] + 1];
} else {
NSLog(@"new");
fam = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:self.managedObjectContext];
fam.generation = [NSNumber numberWithInt:1];
[self saveContext];
};
NSLog(@"There are %d paren", [fam.parents count]);
for (Parent *p in fam.parents) {
NSLog(@"name : %@", p.name);
}
Child *child;
if (!fam.child) {
child = [NSEntityDescription insertNewObjectForEntityForName:
[[NSEntityDescription entityForName:@"Child" inManagedObjectContext:self.managedObjectContext] name]
inManagedObjectContext:self.managedObjectContext];
fam.child = child;
}
fam.child.name = [NSString stringWithFormat:@"child number %d", [fam.generation intValue]];
NSLog(@"There are %d parent after adding one child", [fam.parents count]);
Parent *parent = [NSEntityDescription insertNewObjectForEntityForName:
[[NSEntityDescription entityForName:@"Parent" inManagedObjectContext:self.managedObjectContext] name]
inManagedObjectContext:self.managedObjectContext];
parent.name = [NSString stringWithFormat:@"parent number %d", [fam.generation intValue]];
[fam addParentsObject:parent];
NSLog(@"There are %d parent after add parent", [fam.parents count]);
for (Parent *p in fam.parents) {
NSLog(@"name : %@", p.name);
}
[self saveContext];
Короче говоря, я создаю семью и добавляю в эту семью одного ребенка и одного родителя и распечатываю вывод при первом запуске. Я получил этот результат
2011-08-27 19:06:28.271 child[2015:207] new
2011-08-27 19:06:28.276 child[2015:207] There are 0 paren
2011-08-27 19:06:28.278 child[2015:207] There are 0 parent after adding one child
2011-08-27 19:06:28.279 child[2015:207] There are 1 parent after add parent
2011-08-27 19:06:28.280 child[2015:207] name : parent number 1
.ожидается, затем я снова запускаю приложение, и вот что происходит:
2011-08-27 19:08:12.383 child[2035:207] found
2011-08-27 19:08:12.386 child[2035:207] There are 2 paren
2011-08-27 19:08:12.387 child[2035:207] name : parent number 1
2011-08-27 19:08:12.388 child[2035:207] name : child number 1
2011-08-27 19:08:12.389 child[2035:207] There are 2 parent after adding one child
2011-08-27 19:08:12.390 child[2035:207] There are 3 parent after add parent
2011-08-27 19:08:12.390 child[2035:207] name : parent number 1
2011-08-27 19:08:12.391 child[2035:207] name : parent number 2
2011-08-27 19:08:12.391 child[2035:207] name : child number 2
дочерняя сущность включена в свойство родителей.Это какое-то мое заблуждение или это ошибка в SDK?