2

次の結果を取得する方法はありますか:

    NSObject *a = [[NSObject alloc] init];
    [a class];

インスタンス化せずに?Classオブジェクトを引数として関数に渡し、それをチェックしたいと思います。このような:

    - (void) pushControllerOfClass: (Class) aClass
    {
        if([aClass isSubclassOfClass: *what should I write here?*]) {
        ...
        }
    }

直感的に、私は書いてみました

        if([aClass isSubclassOfClass: UIViewController]) {

しかし、うまくいきません。今後の対応はthxでお願いします。

更新: そのような関数は ObjectiveC では悪いと見なされますか? Nahavandipoor の本iOS 5 Programming Cookbookのコードをリファクタリングしました。それはそのようなものでした:

- (void) pushSecondController{
    SecondViewController *secondController = [[SecondViewController alloc]
                                             initWithNibName:nil 
                                             bundle:NULL];
    [self.navigationController pushViewController:secondController animated:YES];
}

私にとっては、これは一種の悪い機能です。必要なときにパラメーター化されていません。

4

4 に答える 4

8

試してみてください:

 if([aClass isSubclassOfClass:[UIViewController class]])
于 2012-06-05T13:27:57.020 に答える
3

あなたの質問への答えとして、クラスを取得するためにオブジェクトのインスタンスは必要ありません。次のようにクラスから直接取得できます。

[NSString class];
[YourClass class];

ただし、任意のビュー コントローラーをプッシュできるメソッドだけが必要な場合は、パラメーターの型として UIViewController を使用できます。

- (void)pushAnyViewController:(UIViewController *)viewController
{
    [self.navigationController pushViewController:viewController animated:YES];
}

これは、UIViewController のサブクラスである任意のビュー コントローラーを受け取り、それをナビゲーション スタックにプッシュします。

メソッドで割り当ても処理したい場合は、次のようにします。

- (void)pushViewControllerClass:(Class)viewControllerClass
{
    if ([viewControllerClass isSubclassOfClass:[UIViewController class]])
    {
        id viewController = [[viewControllerClass alloc] initWithNibName:nil bundle:nil];
        [self.navigationController pushViewController:viewController animated:YES];
    }
}

そして、次のように呼び出します。

Class viewControllerClass = [MyViewController class];
[self pushViewControllerClass:viewControllerClass];

ペン先を使用している場合は、クラスと同じ名前が付けられていることを確認してください。

于 2012-06-05T16:23:45.983 に答える
2

[UIViewController class]クラスオブジェクトを取得する ように書くことができます。

于 2012-06-05T13:29:10.687 に答える
0

クラスを取得するには、ほとんどのクラスにクラス メソッドが必要です。

これを頻繁に行う場合は、デザインを見直してみませんか?

于 2012-06-05T13:29:45.443 に答える