0

私はこれを求めていると信じることはできませんが、私はこの可変的なものに非常に夢中です.

ユーザー名情報を保存したい。ビューの読み込み時にそれらを読み込みます。この後、ボタンをクリックすると情報が取得されます。

これが私のコードです:

@interface SelfViewController : UIViewController
{
    NSString *usernameString;
}



- (void)viewDidLoad
{
     usernameString = @"test";
}



- (IBAction)goToProfileButtonPressed:(id)sender
{
    NSLog(@"%@", usernameString); //CRASH BAD EXEC

}

私は何を間違えましたか????

4

2 に答える 2

1

.h ファイルを次のように変更します。

@interface SelfViewController : UIViewController {
    NSString *usernameString;
}

@property (retain, nonatomic) NSString *usernameString;

次に、.m ファイルで次のようにします。

@synthesize usernameString;

- (void)viewDidLoad {
     self.usernameString = @"test";
}

- (IBAction)goToProfileButtonPressed:(id)sender {
    NSLog(@"%@", self.usernameString); // "self." can be omitted, but it is best practice not to
}

- (void)dealloc {
    [usernameString release];

    [super dealloc];
}

usernameString問題は、自動解放された文字列オブジェクトに割り当てることです。ボタンが押された時点でusernameString解放されており、ガベージ メモリになっています。それを保持する (そしてその後-dealloc、リークを避けるために解放する) ことで、時期尚早に解放されないことがわかります。

于 2012-04-11T14:41:51.340 に答える
0

ivarを合成し、プロパティとして追加する必要があります。(非ARCコンパイルの場合):

.hで:

@interface SelfViewController : UIViewController
{
    NSString *usernameString;
}    
@property (nonatomic, retain) NSString *usernameString;

.mで:

@synthesize usernameString;
于 2012-04-11T14:26:20.850 に答える