2012-08-26 1 views
1

Я пытаюсь передать объект между двумя ViewControllers в Раскадке в объектном приложении iPhone. (iOS 5/XCode 4)Передача объекта между диспетчерами просмотра с раскадровки (XCode 4/iOS 5)

Первый ViewController - это карта с аннотациями (каждый объект аннотации называется MyLocation, он отображается на карте с помощью MyLocationView). Пользователь нажимает аннотацию, появляется выноска, затем пользователь нажимает стрелку вправо, чтобы загрузить подробное представление аннотации (новый ViewController), который отображает более подробную информацию о выбранной аннотации.

Я определил SegueAnnotationDetail SegueAnnotationDetail, который перемещается между основным контроллером View и контроллером представления деталей аннотации.

Я определил переменный экземпляр в главном контроллере представления, чтобы держать аннотацию, что нажал пользователь, а затем я собираюсь передать его аннотации детали просмотра (ViewController.h):

@interface ViewController : UIViewController <MKMapViewDelegate> { 
    MKAnnotationView *selectedAnnotation; 
} 

Таким образом, в контроллере Основной вид (ViewController.m) Я следующее:

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control 
{ 
    selectedAnnotation = view; 

    [self performSegueWithIdentifier:@"SegueAnnotationDetail" sender:self]; 
} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"SegueAnnotationDetail"]) 
    { 
     LocationDetailViewController *vc = [segue destinationViewController]; 

     [vc setLocation:selectedAnnotation]; 
    } 
} 

Затем в LocationDetailViewController (который является 2-й контроллер представления отображаются подробности для каждой аннотации), у меня есть

@interface LocationDetailViewController : UIViewController 

@property MKAnnotationView* location; 

@end 

Каждый аннотаций является MKPinAnnotationView и создается следующим образом, в методе viewForAnnotation, а также внутри ViewController.m

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 

    static NSString *identifier = @"MyLocation"; 

    MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

    // removed some code related to animation view queue here for simplicity 

    annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 

    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 

    return annotationView; 

} 

Проблема заключается в том, когда это работает, приложение просто падает на линии:

[vc setLocation:selectedAnnotation]; 

UPDATE

сообщение об ошибке в консоли:

2012-08-26 18:33:10.615 ArrestsPlotter[79918:c07] -[UIViewController setLocation:]: unrecognized selector sent to instance 0x6ea0b60 
2012-08-26 18:33:10.615 ArrestsPlotter[79918:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController setLocation:]: unrecognized selector sent to instance 0x6ea0b60' 
*** First throw call stack: 
(0x165e022 0x12cecd6 0x165fcbd 0x15c4ed0 0x15c4cb2 0x3977 0x85c4be 0x4f95ab 0x385b 0x361f8c 0x36d8ba 0x165fe99 0x43414e 0x4340e6 0x4daade 0x4dafa7 0x4da266 0x4593c0 0x4595e6 0x43fdc4 0x433634 0x1da5ef5 0x1632195 0x1596ff2 0x15958da 0x1594d84 0x1594c9b 0x1da47d8 0x1da488a 0x431626 0x231d 0x2285) 

Terminate называется бросать исключение (lldb)

Когда я закомментировать строку, вызвавшую, приложение работает нормально, хотя и не показывая правильную информацию на странице сведений.

WTF Я делаю неправильно?

+0

Какая ошибка возникает при ее сбое? (Если вы его не получите, попробуйте помещать плохую строку внутри @ try/@ catch и регистрировать информацию об исключениях, включая символы стека.) –

+0

Если вы публикуете свои журналы сбоев, вы, вероятно, получите более полезные ответы. Это может быть не связано с раскадными версиями - это могут быть ваши аннотации, которые не являются объектами аннотации и т. Д. И т. Д. Ваши аварийные журналы помогут. – lxt

+0

Спасибо за ответ - Я отправил сообщение об ошибке – Imme22009

ответ

2

Хорошо, я ответил сам. Я отправлю ответ здесь, так как это не так ясно в Интернете.

Чтобы связать файл контроллера вида с указанной сценой в раскадровке, щелкните по сцене, затем используйте Attribute Inspector, выберите Custom Class и выберите класс, который вы хотите использовать.

Так вы связываете контроллер вида со сценой. Вот что вызвало проблему здесь (см. Комментарии к первому ответу)