2014-09-29 65 views
0

我遇到了prepareforsegue风格的问题。我是,因为你可以告诉我的问题相当新的Xcode,我只是没有得到这个权利:准备继续 - 只是没有得到这个权利

我有一个LAFirstView从解析读取数据,我保存在一个名为'kundUppgifter'的数组中。

现在我需要从objectatindex:index到一个名为 LASecondView的下一个视图发送文本。 在LASecondView中,我已经声明了一个名为myLabel的标签,我希望文本显示出来。

我一直在阅读关于它在这里在Stackoverflow,但问题是,当我读其他人的答案我不明白什么来替换的东西。我在LAFirstView中的代码:看起来像这样,当然它不起作用,但我确实从NSLog中得到了正确的结果。 希望能获得帮助:

//IMPLEMENT THIS ONE (WHEN DISCLOSURE BUTTON IS PRESSED): 
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{ 

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

NSUInteger index = [mapView.annotations indexOfObject:view.annotation]; 
PFObject *tempObject = [kundUppgifter objectAtIndex:index]; 
NSLog(@"%lu", (unsigned long)index); 
NSLog(@"%@", [tempObject objectForKey:@"CNAME"]); 

} 
+0

不要依赖按照地图视图的'annotations'数组的顺序 - 它不保证以任何顺序。相反,在注释对象本身(即view.annotation)中保留任何需要的数据(或至少是引用它的数据)。对于segue部分,请参阅http://stackoverflow.com/questions/14805954/mkannotationview-push-to-view-controller-when-detaildesclosure-button-is-clicked。 – Anna 2014-09-29 01:31:12

+0

是的,谢谢你,我发现它不是任何顺序:(我发现这样做:NSString * passedId = view.annotation.title,我得到了我在parse.com下的@ “cname”,它传递给一个名为kundUppgifter的数组,因此不是设置这个:PFObject * tempObject = [kundUppgifter objectAtIndex:index]我想设置它(但它不工作:错误代码):PFObject * tempObject = [ kundUppgifter objectForKey passedId];我没有得到如何做view.annotation你建议,因为我对Xcode是如此的新,你可以解释一点吗?:D – Kardemumma09 2014-09-29 22:20:30

回答

1

所以你的问题是,它不会从LAFirstView传递字符串LASecondView,但日志是正确的?如果是这样的话,你可以在LAFirstView声明一个字符串属性:

@property (strong, nonatomic) NSString* stringToPass; 

然后在披露按钮点击

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

NSUInteger index = [mapView.annotations indexOfObject:view.annotation]; 
PFObject *tempObject = [kundUppgifter objectAtIndex:index]; 
NSLog(@"%lu", (unsigned long)index); 
NSLog(@"%@", [tempObject objectForKey:@"CNAME"]); 

self.stringToPass = [tempObject objectForKey:@"CNAME"]; 

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

} 

而且prepareForSegue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"openingHours"]) { 
     LASecondView *secondView = (LASecondView *)segue.destinationViewController; 
     secondView.labelToUpdate.text = self.stringToPass; 
    } 
} 
+0

你好!我发现它不是索引上的任何顺序。我发现通过这样做:NSString * passedId = view.annotation.title,我得到的标题是我在parse.com下的@“cname”,它传递给一个名为kundUppgifter的数组。因此,不要设置这个:PFObject * tempObject = [kundUppgifter objectAtIndex:index]我想说明一下(但它不工作:错误代码):PFObject * tempObject = [kundUppgifter objectForKey passedId]; – Kardemumma09 2014-09-29 22:23:07

+0

在我看来,有必要创建一个NSDictionary,因为我将自定义annotation.cname和annotation.cstreet以及annotation.objectId添加到名为“Annotation”的自定义注记类中。 – Kardemumma09 2014-10-03 22:34:00

+0

当我写secondView.myLabel.text = self.stringToPass时,secondView.myLabel.text中有nil – Kardemumma09 2014-10-05 13:38:08