0

編集 - 明確にするために改訂しました。

//myViewController.h
@property (strong, nonatomic) SCDataObject *dataObject;

ストーリーボードでは、カスタム クラス myViewController を持つ 1 つの VC を作成しました。ストーリーボード ID myViewControllerStoryboardId を指定しました。

//anotherClass.m 
UIViewController *viewController = 
[self.storyboard instantiateViewControllerWithIdentifier:@"myViewControllerStoryboardId"];

カスタム VC をインスタンス化しますが、いくつかの理由で意図的にUIViewController 型のポインターに設定していることに気付きました。

//anotherClass.m
//I want to set the property, dataObject, of the instantiated VC, but this doesn't work.
viewController.dataObject = something;

実際のオブジェクトにはプロパティがありますが、それへのポインタは別のクラスです。プロパティを設定するにはどうすればよいですか?

4

4 に答える 4

0

viewControllerasと入力するだけidで、プロパティを直接使用することはできませんが、そのプロパティに対応するメッセージを警告なしで送信できます。RespondsToSelector: を使用して、そのプロパティのアクセサー関数がサポートされているかどうかを確認できます。

id viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"myViewControllerStoryboardId"];

if( [viewController respondsToSelector:@selector(setDataObject:)] ) {
    [viewController setDataObject:something];
}

個人的には、おそらく次のようになります。

MyViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"myViewControllerStoryboardId"];

viewController.dataObject = something;
于 2013-03-22T22:12:27.373 に答える
0

警告が表示されますが、これは次の設定で機能するはずです。

[viewController setDataObject:something];

そして、これを取得するため:

[viewController dataObject];

クラッシュを回避するには、おそらく次のようにします。

if ([viewController respondsToSelector:@selector(setDataObject:)])
{
    [viewController setDataObject:something];
}
于 2013-03-22T22:05:30.883 に答える