2012-08-14 37 views
0

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

需要参考,第一个文件调用类的方法获取引用

,我想引用,参考收益使用自
-(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? 
    } 

第二个文件。

- (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; 
} 

回答

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

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

您可能想实例化类并返回实例。

1

由于@AnalogFile提到,在类方法中,self是类对象本身,因此detailMapViewController类对象。即detail == [MapViewController class]确实如此。

[detail class]也计算结果为MapViewController类对象,因为调用类对象的class方法调用+class,它返回类对象本身(+class基本上是一种身份的方法,返回它被称为上的东西,不像-class。实际上,您的+returnReference方法基本上是对+class方法的重新实施。)。所以实际上,detail == [detail class]是真的。

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

+0

所以如果我在第二个文件中创建一个MapViewController财产,通过使返回的参考和实例变量返回它,然后使用第一个文件的MapViewController的一个实例,它应该工作> – 2012-08-15 05:47:10

+0

@TerrelGibson调用它:我不知道真的明白你在说什么。但'+ returnReference'是一个类方法,它只是一个类的方法。这不是一个实例的方法。如果你试图在一个实例上调用'returnReference',它将不会工作,因为没有'-returnReference'。 – newacct 2012-08-15 09:38:51

+0

如果我更改+ returnReference到-ReturnReference? – 2012-08-15 18:12:50

相关问题