繁体   English   中英

创建对另一个类的引用,Objective C.

[英]Creating reference to another class, Objective C

在我的第一个文件中,我希望能够引用我的第二个文件并更改它拥有的属性,这就是我所拥有的。 我创建了一个类方法来返回引用,但问题是我在方法中得到一个警告,最重要的是当我执行if语句时它似乎没有运行。

第一个需要引用的File,调用类方法来获取引用

-(void) updateSplitViewDetail{

id detail =  (MapViewController*) [MapViewController returnReference];
NSLog(@"%@", [detail class]); //This post MAPVIEWCONTROLLER

//This fails so I cant access the methods inside.
if ([detail isKindOfClass:[MapViewController class]]) {
    MapViewController *mapVC = (MapViewController*) detail;
    mapVC.delegate = self;
    mapVC.annotations = [self mapAnnotations];
}

}

 (void)viewDidLoad
  {
[super viewDidLoad];    
[self updateSplitViewDetail]; //Error may be here?
  }

我要引用的第二个文件,使用self返回引用。

- (void)viewDidLoad
{

NSLog(@"%@", [self class]);

[super viewDidLoad];
self.mapView.delegate = self;
// Do any additional setup after loading the view.
}

+(MapViewController*) returnReference{
//I also get an incompatible pointer return warning here?
return self;
}
+(MapViewController*) returnReference {
    //I also get an incompatible pointer return warning here?
    return self;
}

你得到一个警告,因为这是一个类方法(参见+),因此this是类型为Class的类型(MapViewController*) 它指的是MapViewController类而不是该类的实例。 你要返回的指针是类本身,而不是实例。 这就是测试失败的原因,您无法在其他代码中调用实例方法。

您可能希望实例化该类并返回实例。

正如@AnalogFile所提到的,在类方法中, self是类对象本身,因此detailMapViewController类对象。 即, detail == [MapViewController class]是真的。

[detail class]也计算到MapViewController类对象,因为在类对象上调用class方法会调用+class ,它返回类对象本身( +class基本上是一个标识方法,返回它被调用的东西;不像-class 。其实,你的+returnReference方法基本上是一个重新实现的+class方法)。 所以实际上, detail == [detail class]是真的。

另一方面, [detail isKindOfClass:[MapViewController class]]失败,因为它调用-isKindOfClass:没有单独的+isKindOfClass: ,它测试对象是否是该类的实例,并且您的类对象是不是它自己的一个实例(一个类对象是它的元类的一个实例,它遵循继承链到根类的元类,然后继承自根类本身)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM