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;

在他们中:

@synthesize usernameString;
于 2012-04-11T14:26:20.850 回答