0

最初のファイルで、2番目のファイルへの参照を取得し、そのファイルが持つプロパティを変更できるようにしたいと思います。これが私が持っているものです。参照を返すクラスメソッドを作成しましたが、問題は、メソッドで警告が表示されることです。さらに、ifステートメントを実行すると、実行されていないように見えます。

参照が必要な最初のファイル、参照を取得するためにクラスメソッドを呼び出します

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

参照したい2番目のファイルは、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;
}
4

2 に答える 2

1

@AnalogFileが述べたように、クラスメソッド内にselfは、クラスオブジェクト自体があり、クラスオブジェクトも同様detailですMapViewController。つまり、それは本当ですdetail == [MapViewController class]

[detail class]また、クラスオブジェクトのメソッドを呼び出すと、クラスオブジェクト自体が返されるMapViewControllerため、クラスオブジェクトにも評価されます(基本的にはアイデンティティメソッドであり、呼び出されたものを返します。実際、メソッドは基本的に再実行されます。メソッドの実装。)。だから実際には、本当です。class+class+class-class+returnReference+classdetail == [detail class]

[detail isKindOfClass:[MapViewController class]]一方、は失敗します。これは、オブジェクトがそのクラスのインスタンスであり、クラスオブジェクトがそれ自体のインスタンスではない(クラスオブジェクトはそのメタクラスのインスタンスである)かどうかをテストする-isKindOfClass:(個別のはありません)を呼び出すためです。 +isKindOfClass:、ルートクラスのメタクラスへの継承チェーンをたどり、ルートクラス自体から継承します)。

于 2012-08-14T09:20:42.903 に答える
1
+(MapViewController*) returnReference {
    //I also get an incompatible pointer return warning here?
    return self;
}

これはクラスメソッド(+を参照)であるため、警告が表示されます。したがってthis、タイプはタイプではありClassません(MapViewController*)。これは、そのMapViewControllerクラスのインスタンスではなく、クラスを参照します。そして、返されるポインタはクラス自体であり、インスタンスではありません。これがテストが失敗し、他のコードでインスタンスメソッドを呼び出すことができない理由です。

おそらく、クラスをインスタンス化して、代わりにインスタンスを返したいと思うでしょう。

于 2012-08-14T00:39:03.120 に答える