Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的iOS应用程序中的变量?_Ios_Nsstring - Fatal编程技术网

我的iOS应用程序中的变量?

我的iOS应用程序中的变量?,ios,nsstring,Ios,Nsstring,我不敢相信我在问这个问题,但我对这些变化无常的东西非常着迷 我想保存一个用户名信息。我以我的观点来载入它们。在此之后,我将在单击按钮时获得信息 这是我的密码: @interface SelfViewController : UIViewController { NSString *usernameString; } - (void)viewDidLoad { usernameString = @"test"; } - (IBAction)goToProfileBut

我不敢相信我在问这个问题,但我对这些变化无常的东西非常着迷

我想保存一个用户名信息。我以我的观点来载入它们。在此之后,我将在单击按钮时获得信息

这是我的密码:

@interface SelfViewController : UIViewController
{
    NSString *usernameString;
}



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



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

}

我做错了什么???

您需要合成ivar并将其添加为属性。(对于非圆弧编译):

在.h中:

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

@synthesize usernameString;

将.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
中释放它以避免泄漏),您知道它不会过早释放。

您应该合成iVar并生成属性。由于未保留自动删除的NSString@“test”,因此会出现错误的EXEC错误。该代码没有任何错误,只是不是一个完整的最小示例。您还应该说明是否正在使用ARC。我的第一个猜测是该按钮未正确连接到SelfViewController的实例。如果您删除了
NSLog
,您能在不造成崩溃的情况下按下按钮吗?@Dondragmer:是的,没有问题。如果您包括
NSLog(@“Text”)-未尝试显示
usernameString
-是否出现这种情况?问题出在自身。ThanksNo problem—
self
表示它不直接设置变量,而是根据属性类型执行操作。由于我们使用
self
将其设置为retain(非原子,这只是意味着它是线程不安全的,但速度更快),因此它被保留。希望这有意义!只是一个小的术语更正:“问题是您将usernameString分配给自动删除的字符串对象”