我定义了一个从其他 View 调用的全局变量,它是第一次工作,但不是后续的,它与第一次调用的值保持一致!假设这是 cocoa 的一个基本问题,并且变量没有根据其需要正确定义。感谢您提供任何解决问题的想法。
声明:
@interface TableArchiveAppDelegate : NSObject <UIAppDelegate> {
NSString *varName;
}
@property (nonatomic, copy) NSString *varName;
然后 .m 文件上的相关行:
@synthesize varName;
-(void)test{
varName = textField.text;
}
以及来自另一个 View 的请求:
- (void)viewDidLoad {
TableArchiveAppDelegate *mainDelegate = (TableArchiveAppDelegate *)[[UIApplication sharedApplication] delegate];
name.text = mainDelegate.varName;
[super viewDidLoad];
}
最佳答案
不确定我是否理解这个问题,但所提供的代码将导致 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.
表示法,以确保它们得到正确的保留/复制/释放等。当然,唯一的异常(exception)是如果您编写自己的自定义访问器。
关于iphone - 全局变量调用仅在第一次有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571586/