0

クラス メソッド内でインスタンス変数を渡すことができないことを理解しているので、2 つの違いが何であるかについて混乱することはもうありません。

したがって、私は少し立ち往生しています。

NSString2 つのクラス メソッドがあり、どちらも引数としてa を取ることができます。

とにかくそれらを一致させることはできますか?1 つの Class メソッドには、ボタンが押された後に Safari で開く必要がある URL となる文字列が含まれているため@selector(openBrowser:)、URL が何であるかを知る必要があります。JWKObjectView01

これを行う方法があることを教えてください??

すべてをインスタンスメソッドに変更しようとしましたが、ボタンを押すとアプリがクラッシュするため、これを解決しようとしています:-)

前もって感謝します。PS私は、2つのクラスを混在させることはできないことを理解していると言うことから始めていることを知っています-私の知る限り、何かが足りないのでしょうか?

//追加コード:

UIView クラス .h ファイル

@interface JWKObjectView01 : UIView <UIWebViewDelegate>
{
    NSString *string;
    NSURL *url;

    NSUserDefaults *defaults;
}

+ (JWKObjectView01 *)anyView:(UIView *)anyView
                         title:(NSString *)title
                        weburl:(NSString *)webstring;

+ (void)openBrowser:(NSString *)urlString;

.m ファイル

+ (JWKObjectView01 *)anyView:(UIView *)anyView
                       title:(NSString *)title
                      weburl:(NSString *)webString
{
    JWKObjectView01 *anotherView = [[JWKObjectView01 alloc] initWithFrame:CGRectMake(0,0,320,200)];
    anotherView.backgroundColor = [UIColor yellowColor];

    [anyView addSubview:anotherView];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(20, 20, 100, 100);

    [button setTitle:title forState:UIControlStateNormal];
    [button addTarget:self action:@selector(openBrowser:) forControlEvents:UIControlEventTouchUpInside];

    [anotherView addSubview:button];

    return anotherView;
}

+ (void)openBrowser:(NSString *)urlString;
{

    //This is where I am stuck and I need the variable - weburl:(NSString *)webString - 

    NSURL *url = [NSURL URLWithString:urlString];

    [[UIApplication sharedApplication] openURL:url];
}

.m ファイル ビュー コントローラー

-(void)viewDidLoad
  {
     [JWKObjectView01 anyView:self.view title:@"OPEN" weburl:@"http://google.com"];
  }
4

1 に答える 1

1

URL には静的変数を使用します。メソッドで初期化しますinitialize(メソッドではありませんinit)。もちろん、静的変数の値を設定するメソッドを追加できます。

静的変数は、他の言語のクラス変数と同様に、実行時に一度だけ存在します。

しかし、それらはクラス変数ではありません。名前が他のクラスの他の静的変数にも使用されている場合、名前の競合が発生する可能性があります。したがって、シングルトン パターンに慣れ、静的変数が必要な場合はいつでもそれを使用することを検討してください。

一部の人々は、グローバル文字の値のコンテナーとしてアプリケーション デリゲート オブジェクトを「悪用」します。これは「常識外れ」ではないかもしれませんが、問題なく動作し、非常に一般的です。ただし、シングルトンの方がはるかに優れていると思います。

これはすべて、関連する URL が のすべてのインスタンスに対して一度に同じ値を持つことを前提としていますJWKObjectView01

于 2013-04-18T10:50:32.093 に答える