2014-10-04 3 views
0

В конечном итоге мне удалось получить индекс для аннотации, нажатой на callOutAccecoryControlTapped-method. :) Я создал пользовательский класс аннотации под названием Annotation (Annnotation * ann), который я заполняю значениями из моего db на parse.com. Но теперь я не знаю, как передать значения на мой следующий вид LAOpeningHoursViewController? Я могу видеть все значения, когда я отлаживаю и * ann (se code) имеет, например: ann.cname = «Olles cafe» и т. Д. Так что это хорошо.Xcode: Передача объекта между двумя видами?

Я передаю весь объект ann на свой следующий вид. Но я не знаю, как получить, например, ann.cname, на мой «self.myLabel.text». Я покажу вам код:

Если у вас есть доброта, чтобы ответить мне, пожалуйста, объясните это очень хорошо, потому что я новичок. Лучше всего, если вы могли бы иметь проблемы написания кода-фрагмент здесь ...;)

Это некоторый код первого взгляда:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"]; 
if (!pinView) { 
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"]; 
    pinView.pinColor = MKPinAnnotationColorRed; 
    pinView.animatesDrop = YES; 
    pinView.canShowCallout = YES; 

    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    pinView.rightCalloutAccessoryView = rightButton; 

} else { 
    pinView.annotation = annotation; 
} 
return pinView; 
} 


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

    Annotation *ann = [[mapView selectedAnnotations] objectAtIndex:0]; 

    NSLog(@"ann.subtitle = %@", ann.subtitle); 
    NSLog(@"ann.cid = %@", ann.cid); 
    NSLog(@"ann.cstr = %@", ann.cstr); 
    NSLog(@"ann.cname = %@", ann.cname); 
    //this works fine, I get all the values 

    [self performSegueWithIdentifier: @"openingHours" sender:ann]; 


} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"openingHours"]) { 

    LAOpeningHoursViewController *secondView =  (LAOpeningHoursViewController*)segue.destinationViewController; 
    //PFObject *tempObject = [[myMapView selectedAnnotations] objectAtIndex:0]; 
    Annotation *ann = (id)sender; 

    //Here is the problem: What to pass? I want to pass for example ann.cname that is declared in my custom annotation 
    //Both 'ann' and 'tempObject' has the right values for cname but I dont know how to pass it to the next view 
    secondView.myLabel.text = self.stringToPass; 
    //secondView.myLabel.text = ann.cname; 
     } 
    } 

А вот код со второй точки зрения называется LAOpeningHoursViewController, которые должны получить данные:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 


     self.myLabel.text = ann.cname; 
     //recieving an error-code… of course 

} 

объявленных в LAOpeningHoursViewController.h как это

@property (strong, nonatomic) IBOutlet UILabel *myLabel; 
@property (strong, nonatomic) NSString *textContent; 

и, наконец, вот мой Annotation.h-файл, в котором CNAME является тот, который должен выйти на «MyLabel»

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 

@interface Annotation : NSObject <MKAnnotation> 
@property(nonatomic, assign) CLLocationCoordinate2D coordinate; 
@property(nonatomic, copy)NSString *title; 
@property(nonatomic, copy)NSString *subtitle; 
@property(nonatomic, copy)UIButton *rightButton; 

@property(nonatomic, retain)NSString *cid; 
@property(nonatomic, retain)NSString *cname; 
@property(nonatomic, retain)NSString *ctel; 
@property(nonatomic, retain)NSString *cstr; 
@property(nonatomic, retain)NSString *cmon; 
@property(nonatomic, retain)NSString *ctue; 
@property(nonatomic, retain)NSString *cwed; 
@property(nonatomic, retain)NSString *passedId; 
@property(nonatomic, retain)NSString *objectId; 


@end 
+0

Возможный дубликат [Передача данных между контрольными контроллерами] (http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) –

+0

Спасибо @Hot Licks, но мне нужно понять, как я могу получить значения из моего пользовательского класса Annotation * ann от первого представления до моего второго. Я хочу написать ann.cname, но я получаю свойство, которое не найдено на объекте типа PFObject. Теперь это просто не работает, и это сводит меня с ума :) – Kardemumma09

+0

И вы включаете Annotation.h в LAOpeningHoursViewController.m? (И как объявляется 'ann') –

ответ

0

Параметр sender в [self performSegueWithIdentifier: @"openingHours" sender:ann]; должен быть установлен в self. Это предназначено, чтобы предоставить представленную ссылку контроллера просмотра на контроллер представления.

Добавить объект @property (nonatomic, strong) Annotation *selectedAnnotation к контроллеру представления. Так что он может быть установлен таким образом:

//this works fine, I get all the values 

[self setSelectedAnnotation:ann]; 
[self performSegueWithIdentifier: @"openingHours" sender:ann]; 

Теперь у вас есть выбранный аннотацию как свойство может быть использовано для инициализации LAOpeningHoursViewController:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"openingHours"]) { 

    LAOpeningHoursViewController *secondView =  (LAOpeningHoursViewController*)segue.destinationViewController; 
    //PFObject *tempObject = [[myMapView selectedAnnotations] objectAtIndex:0]; 
    Annotation *ann = (id)sender; 

    // Setup second view here: 
    secondView.myLabel.text = self.selectedAnnotation.cname; 
    // assign further properties here... 
    } 
} 

Я надеюсь, что это помогает, удачи!

Смежные вопросы