1

これは、2つの異なるクラスでサブビューを開いたり閉じたりするための2つのIBActionを使用した私のコードです

- (IBAction) showListClient:(id) sender {

if( list == nil){

    list = [[ListClient alloc] initWithNibName:@"ListClient" bundle:nil];
    [list setDelegate:self];
    [self.view addSubview:list.view];
}

}

そして閉じるために

-(IBAction)closeListClient {
[self.view removeFromSuperview];
}

今では初めて大丈夫ですが、もっと時間を使いたい場合は、リストをcloseListClientに書き込む必要があります

list = nil;
[list release];

今私の問題は、この「リスト」がクラスListClientでのみ宣言されていることです。

ListClient *list;

CloseListClientにリストを書き込むとエラーになります...どうすればよいですか?

4

2 に答える 2

0

私はあなたの問題を解決するかもしれないいくつかの問題を指摘したいと思います。私はあなたの質問、特にビューの開閉の言い回しについて少し迷っています。どのボタンが押されたかに基づいて、ビューを非表示および表示したいだけだと確信しています。

このコードは正しくありません

-(IBAction)closeListClient {
    [self.view removeFromSuperview];
}

//I am sure you want to remove the list view
-(IBAction)closeListClient {
   [list.view removeFromSuperview];
}

そして、releaseとnilの操作はここでは逆方向です

list = nil;
[list release];

//Change to
[list release];
list = nil;

あなたはで終わる必要があります

-(IBAction)closeListClient {
    [list.view removeFromSuperview];
    [list release];
    list = nil;
}
于 2011-04-05T15:28:37.770 に答える
0

ListCLient.hで、デリゲートのプロトコルを定義します。

@protocol ListClientDelegate<NSObject>
@optional
- (void)listClientDidClose:(ListClient *)listClient;
@end

次のプロパティ定義を変更しますdelegate

@property (nonatomic, assign) id<ListClientDelegate> delegate;

次に、closeListClientアクションが(ListClient.mで)呼び出されたときに、デリゲートにメッセージを送信します。

-(IBAction)closeListClient {
    [self.view removeFromSuperview];
    [self.delegate listClientDidClose:self]
}

次に、最後にSomeController.mでデリゲートメソッドを実装します。

-(void)listClientDidClose:(ListClient *)listClient {
    [list release];
    list = nil;
}

それがあなたの問題を解決することを願っています。

于 2011-04-05T16:07:49.133 に答える