我定义了一个从其他视图调用的全局变量,它首次运行但不跟随它,它与第一次调用的值保持一致!假设这是一个可可的基本问题,并且根据需要没有正确定义变量。谢谢你有任何想法来解决它。
声明:
@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 :(得分:1)
不确定我是否理解了这个问题,但是所提供的代码将导致varName属性保存调用-test
方法时从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.
表示法,以确保它们得到正确保留/复制/释放等。当然,唯一的例外是如果您自己编写自定义访问器。