0

UIView を別のクラスに渡そうとしています-これはちょっとうまくいきますが、ポインターを保持できません...

私の .h ファイルで、ビューを宣言します。

UIView *someView;

プロパティを追加します

@property (nonatomic, retain) UIView *someView;

そして、.m-ファイルでプロパティを合成します

@synthesize someView;

次に、ビューを設定する方法があります(.hファイルにも設定されています-信じてください:):

-(void)makeViewPointer:(UIView *)myView{
    someView = [[UIView alloc] init];
    someView = myView;

    for(UIView *aView in someView.subviews){

        NSLog(@"tag %d", aView.tag);

    }
}

これまでのところ、すべてが機能しています。someView をログに記録すると、ポインターが取得され、すべてのサブビューにアクセスできるようになります。

私は別のクラスからこのメソッドを呼び出しています - これはうまくいくようです。

今 - ボタンがクリックされた後にそのビューで何かを行うように IBAction を設定しました

-(IBAction)doSomething:(id)sender{
    NSLog(@"show the view %@", someView);

    for(UIView *aView in someView.subviews){  // doesn't output anything

        NSLog(@"tag %d", aView.tag);

    }

}

この時点で、 someView-var は再び空になります - なぜ????

@property (非アトミック、保持) を使用すると、変数が自動的に保持されると思いましたか?

また、初期化時に変数を保持しようとしました:

someView = [[UIView alloc] retain];

動作しません

また

someView = [[UIView alloc] init];
[someView retain];

どちらも機能しません...

いったい私は何を間違っているのですか?

助けてくれてありがとう!

4

3 に答える 3

0

いくつかのこと。

someView = [[UIView alloc] init];
someView = myView;

上記は間違っています。まず、新しいUIViewインスタンスを作成して に割り当てますsomeView。次に、に割り当てmyViewますsomeView。を解放したことがなく、再割り当てしただけなので、これはメモリリークを引き起こしていますsomeView

あなたがやろうとしていることはこれだと思います:

[someView release];
someView = [myView retain];

someView次に、完全に終了したらリリースする必要があります。

これは@property (nonatomic, retain)will が行うことですが、それを使用するには、次のことを行う必要があります。

[self setSomeView:myView];
于 2010-06-22T17:42:38.413 に答える
0

自己ドット表記を使用しない場合、プロパティに割り当てられたオブジェクトは保持されません。

以下を使用する必要があります。

self.someView = myView;

for(UIView *aView in self.someView.subviews){

自己表記は、保持を管理する合成アクセサー メソッドを呼び出します。self を使用しないと、何も適切に保持されません。

于 2010-06-22T18:06:12.193 に答える
0

わかりました - 私はすべてを可能な限り間違ったことをしたと思います ;)

IB でビューを設定したことを言及する必要があったと思います。そこで、話していたクラスを親ビューに追加しました(紛らわしいように聞こえますが、IBです:)...

目標は、ある種のオーバーレイ ビュー ポップアップを表示することでしたが、そのビューを別の nib ファイルに入れたくありませんでした。そのため、classs-library からクラスを追加しました。

私はついにあきらめて、オーバーレイを別のペン先に移動し、クラスをビューコントローラーにしました...すべてが正常に機能します...

とにかくヒントをありがとう、皆さん - 私はかなり学びました...

于 2010-06-23T00:16:57.617 に答える