0

私の.hファイルで

@interface DemoApp : UIViewController   {
    UITextView *textView;
@private

    NSString *status;

    NSInteger *track1Len,*track2Len;


}
@property (nonatomic,retain) NSString *status;

ファイル.m

    @synthesize status;
- (void)onDecodeCompleted:(NSString *)sts
{
   status=sts;
   NSLog(@"status is %@",status);

}

- (IBAction)processButton:(id)sender
{
   NSLog(@"status is %@",status);
   // here I am getting null value
}

クラスファイル全体で変数にアクセスするだけです。ondecodecompletedメソッドでは、パラメーターとして渡された値を取得していますが、プロセスボタンを押した後、null値を取得しています。

4

2 に答える 2

2

試してください:self.status両方の場所で。

- (void)onDecodeCompleted:(NSString *)sts
{
   self.status=sts;
   NSLog(@"status is %@",self.status);

}

- (IBAction)processButton:(id)sender
{
   NSLog(@"status is %@",self.status);
   // here I am getting null value
}

またNSString、変更可能なサブクラスを持つ which を使用しているため、それを as としてマークしcopy、notとしてマークする必要がありますretain

@property (nonatomic,copy) NSString *status;

于 2012-12-01T15:28:27.707 に答える
0

iVar を失っている理由はownership、変数を直接設定しているときに変数を取得していないためです。所有権を取得するには、 ORを
実行する必要があります。 所有権を取得しない場合、その寿命はおそらくあなたが望むものではありません。 status = [sts copy];status = [sts retain]
statussts

iVar に直接アクセスすることは、ローカル メモリの管理を毎回正しく行う必要があるため、通常はお勧めできません。
ベスト プラクティスは、@propertywithを使用することdot syntaxです。プロパティは、宣言したセッターに応じてセッターのメモリ管理を行います。

于 2012-12-01T15:44:00.037 に答える