2012-08-14 39 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

相關問題