我有一个地图视图,其中使用Core Data填充了名为Venues的对象。我通过fetchedResultsController将数据转换为地图注释,如下所示:
-(void) createAnnotations {
_annotations=[[NSMutableArray alloc] init];
for(Venue *selectedVenue in [self.fetchedResultsController fetchedObjects]) {
currentVenue = NULL;
double clatD = [selectedVenue.clat doubleValue];
double clongD = [selectedVenue.clong doubleValue];
CLLocationCoordinate2D selectedCoord;
selectedCoord.latitude = clatD;
selectedCoord.longitude = clongD;
MyAnnotation* annot=[[MyAnnotation alloc] init];
annot.coordinate=selectedCoord;
annot.title=selectedVenue.title;
annot.subtitle=selectedVenue.address;
[_annotations addObject:annot];
}
然后我使用以下方法在地图上绘制注释:
[mapView addAnnotations:_annotations];
可能有一种更好的做事方式,但嘿,它有效。
无论如何,这个问题。我设置它,以便当用户按下注释时,它会切换到详细视图,该视图旨在获得有关该特定Venue对象的更多信息。这是信息传递的地方,而这就是我被困住的地方:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showVenueDetailFromMap"]) {
DisplayDetailViewController *ddvc = (DisplayDetailViewController *) [segue destinationViewController];
// This is where I want to pass the chosen object to the next view. But how?
Venue *selectedVenue = (Venue *) [self.fetchedResultsController objectAtIndexPath:???];
ddvc.currentVenue = selectedVenue;
}
}
我认为它可能与下一段代码有关。据我所知,这是应用程序知道哪个Venue被选中的唯一地方。但是所有它知道的是注释的内容(即标题,副标题,坐标),那么如何将它从fetchedResultsController链接回原来的Venue对象?
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
[self performSegueWithIdentifier:@"showVenueDetailFromMap" sender:self];
NSLog(@"%@",view.annotation.title);
NSLog(@"%@",view.annotation.subtitle);
}
关于上述的说明。我从桌面视图中完成了这个设置。我只是像这样引用选定的行:
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Venue *selectedVenue = (Venue *) [self.fetchedResultsController objectAtIndexPath:indexPath];
我不知道如何使用基于注释的地图设置做同样的事情,而不是我的漂亮的表设置充满行和部分。
我希望这是有道理的。我很欣赏这是一个非常简单的问题。基本上我要问的是“在使用地图视图而不是表视图时如何从fetchedResultsController引用对象?”
任何想法都会非常感激!
答案 0 :(得分:1)
修改MyAnnotation
类以保存索引路径属性。通过从FRC请求indexPathForObject:selectedVenue
来创建注释时设置此项。
选择注释后,您现在可以获取索引路径并将其存储为currentVenue
(或者可以将其作为segue的发送者传递)。