Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Iphone 全局变量调用仅在第一次工作_Iphone_Cocoa_Nsstring_Global Variables - Fatal编程技术网

Iphone 全局变量调用仅在第一次工作

Iphone 全局变量调用仅在第一次工作,iphone,cocoa,nsstring,global-variables,Iphone,Cocoa,Nsstring,Global Variables,我定义了一个全局变量,它是从另一个视图调用的,它第一次工作,但没有后续的变量,它保留了第一次调用时的值!假设这是一个基本问题,变量没有根据需要正确定义。谢谢你提出解决这个问题的建议 声明: @interface TableArchiveAppDelegate : NSObject <UIAppDelegate> { NSString *varName; } @property (nonatomic, copy) NSString *varName; @sy

我定义了一个全局变量,它是从另一个视图调用的,它第一次工作,但没有后续的变量,它保留了第一次调用时的值!假设这是一个基本问题,变量没有根据需要正确定义。谢谢你提出解决这个问题的建议

声明:

@interface TableArchiveAppDelegate : NSObject <UIAppDelegate> {

    NSString        *varName;
}

@property (nonatomic, copy) NSString *varName;
@synthesize varName;

-(void)test{

        varName = textField.text;
}
- (void)viewDidLoad {


    TableArchiveAppDelegate *mainDelegate = (TableArchiveAppDelegate *)[[UIApplication sharedApplication] delegate];

    name.text = mainDelegate.varName;

    [super viewDidLoad];
}
并从另一个视图请求:

@interface TableArchiveAppDelegate : NSObject <UIAppDelegate> {

    NSString        *varName;
}

@property (nonatomic, copy) NSString *varName;
@synthesize varName;

-(void)test{

        varName = textField.text;
}
- (void)viewDidLoad {


    TableArchiveAppDelegate *mainDelegate = (TableArchiveAppDelegate *)[[UIApplication sharedApplication] delegate];

    name.text = mainDelegate.varName;

    [super viewDidLoad];
}

我不确定我是否理解这个问题,但是当调用
-test
方法时,显示的代码将导致varName属性保存textField.text中设置的任何值。如果您从未为其指定不同的值,它将永远保留该初始值

您的问题可能是您没有使用合成的访问器

这:

…通过创建另一个NSString实例并使用pass NSString的值填充它,创建一个综合访问器,该访问器复制传递给它的NSString对象。然而,这:

varName = textField.text;
varName分配给textField.Text中保存的字符串的地址。没有任何东西会被复制。如果textField.text更改,varName也会更改,因为两个ivar在同一地址共享相同的字符串值。此外,当textField.text释放字符串时,它也将从varName中消失

要复制textField.text的字符串,需要使用:

self.varName = textField.text;
。。。调用具有复制功能的综合访问方法


通常,在引用类自己的属性时,应该始终使用
self.
符号,以确保它们得到正确的保留/复制/发布等。当然,唯一的例外是,如果您编写自己的自定义访问器

我不确定我是否理解这个问题,但是当调用
-test
方法时,显示的代码将导致varName属性保存textField.text中设置的任何值。如果您从未为其指定不同的值,它将永远保留该初始值

您的问题可能是您没有使用合成的访问器

这:

…通过创建另一个NSString实例并使用pass NSString的值填充它,创建一个综合访问器,该访问器复制传递给它的NSString对象。然而,这:

varName = textField.text;
varName分配给textField.Text中保存的字符串的地址。没有任何东西会被复制。如果textField.text更改,varName也会更改,因为两个ivar在同一地址共享相同的字符串值。此外,当textField.text释放字符串时,它也将从varName中消失

要复制textField.text的字符串,需要使用:

self.varName = textField.text;
。。。调用具有复制功能的综合访问方法


通常,在引用类自己的属性时,应该始终使用
self.
符号,以确保它们得到正确的保留/复制/发布等。当然,唯一的例外是,如果您编写自己的自定义访问器

不清楚问题出在哪里。也许你可以提供你想看到的值以及你想看到它们的时间,以及你实际看到的值;你的应用程序委托中有两个名为
varName
,一个是实例变量,另一个是属性。不清楚问题出在哪里。也许你可以提供你想看到的值以及你想看到它们的时间,以及你实际看到的值;您的应用程序委托中有两个名为
varName
,一个是实例变量,另一个是属性。Hi-TechZen,self.varName是解决方案!我真的很感谢你们的支持和明确的步骤!!Hi-TechZen,self.varName是解决方案!我真的很感谢你们的支持和明确的步骤!!