2010-04-03 31 views
1

我定义了一个全局变量,它是从其他视图调用的,它正在第一次工作,但没有跟随它,它保持第一次调用的值!假设这是一个可可基本问题,并且变量未根据需要进行适当定义。感谢任何想法解决它。全局变量调用只能第一次工作

声明:

@interface TableArchiveAppDelegate : NSObject <UIAppDelegate> { 

    NSString  *varName; 
} 

@property (nonatomic, copy) NSString *varName; 

上.m文件然后相关线:

@synthesize varName; 

-(void)test{ 

     varName = textField.text; 
} 

和从另一种观点认为请求:

- (void)viewDidLoad { 


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

    name.text = mainDelegate.varName; 

    [super viewDidLoad]; 
} 
+0

不清楚问题是什么。也许你可以提供你想看到的价值,当你想看到它们以及你实际看到的价值。 – TechZen 2010-04-03 15:13:12

+0

Ruthy:'varName'在这里不是一个全局变量;你的应用程序委托中有两个名为'varName'的事物,一个是实例变量,另一个是属性。 – 2010-04-04 05:16:24

回答

1

不知道我是否理解这个问题,但当调用-test方法时,呈现的代码将导致varName属性保存从textField.text设置的任何值。如果你永远不会给它赋予不同的值,它会永远保持这个初始值。

你的问题可能是你不使用合成的存取。

此:

@property (nonatomic, copy) NSString *varName; 

...创建合成访问该副本通过创建另一个NSString的实例,并与通的NSString的值填充它传递给它的NSString的对象。然而,这样的:

varName = textField.text; 

... 分配的varName到的TextField.text举行的字符串地址。没有被复制。如果textField.text发生更改,varName也会发生更改,因为两个iVar在相同地址共享相同的字符串值。此外,当textField.text释放字符串时,它也会从varName中消失。

要复制的TextField.text你需要使用字符串:

self.varName = textField.text; 

...唤起它有它里面的复制功能的综合接入方法。

一般来说,当引用一个类的属性时,应该总是使用self.表示法,以确保它们得到正确的保留/复制/发布等。当然,唯一的例外是如果您编写自己的自定义存取器。

+0

嗨TechZen,self.varName是解决方案!我非常感谢您的支持和明确的步骤! – Ruthy 2010-04-03 23:24:13