如何从类

时间:2016-11-11 03:45:00

标签: ios objective-c

也许问题很奇怪,但我真的想知道怎么做。

我有一个自定义注释的类:

-(MKAnnotationView *)annotation
    {
        NSArray *imageArray = [[NSArray alloc] initWithObjects:@"pin1",@"pin2",@"pin3", nil];

        AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];

        MKAnnotationView *annotationView1 = [[MKAnnotationView alloc] init];

        annotationView1.frame = CGRectMake(0, 0, 30, 30);
        annotationView1.canShowCallout = true;

        MKAnnotationView *annotationView2 = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:@"annotation"];

        annotationView2.image = [UIImage imageNamed:imageArray[vc.i]];
        annotationView2.frame = CGRectMake(0, 0, 30, 30);
        annotationView2.layer.cornerRadius = 15;
        annotationView2.layer.masksToBounds = true;
        [annotationView1 addSubview:annotationView2];

        NSLog(@"AnnotationClass i = %d", vc.i);

        return  annotationView1;
    }

    @end

和AnnotationViewController的viewForAnnotation函数类似:

- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[Annotation class]]) {

        // Custom annotation
        Annotation *customAnnotaton = [[Annotation alloc] init];
        MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"annotation"];

        if (annotationView == nil) {
            annotationView = customAnnotaton.annotation;
            self.i += 1;
            NSLog(@"AnnotationViewController i = : %d", self.i);
        }
        return annotationView;
    }
    return nil;
}

@end

因为我想让3个注释包括不同的图像,所以我创建了一个输入图像的数组。

当制作注释时,注释图像应该是我想要的彼此不同。所以我使用int&#34; i&#34;获取数组索引并将图像放到每个注释中:

 AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];

和:

annotationView2.image = [UIImage imageNamed:imageArray[vc.i]];

获取索引并将图像设置为每个注释。

问题是,在运行应用程序时,注释图像是相同的。 我打印索引和结果:

[7783:2749915] AnnotationClass i = 0
[7783:2749915] AnnotationViewController i = 1
[7783:2749915] AnnotationClass i = 0
[7783:2749915] AnnotationViewController i = 2
[7783:2749915] AnnotationClass i = 0
[7783:2749915] AnnotationViewController i = 3

正如您所看到的那样,&#34; AnnotationClass i&#34;是从Annotation Class打印的,&#34; AnnotationViewController i&#34;是打印形式AnnotationViewController。

显然,价值&#34;我&#34;在AnnotationClass中,从AnnotationViewController调用并不是值本身。

我认为问题是在调用类时,AnnotationViewController每次都是init,所以值总是为0。

任何人都可以帮我解决问题,即如何从Class中获取AnnotationViewController的值?

2 个答案:

答案 0 :(得分:0)

  

我认为问题是在调用类时,AnnotationViewController每次都是init,所以值总是为0。

完全正确!你在说:

AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];

使成为一个全新的AnnotationViewController。这大概不是你想要做的。你想要做的是引用到已经存在的AnnotationViewController

答案 1 :(得分:0)

在@matt建议之后,我找到了我需要的ViewController

这样的代码:

覆盖

AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UITabBarController *tabVc = (UITabBarController *)delegate.window.rootViewController;
ViewController *vc = (ViewController *)tabVc.viewControllers[0];

非常感谢@matt,并希望这可以帮助其他人有同样的问题:)