嗨,我有点问题。我的程序不记得通过单击第一个按钮生成的随机值。但是我希望在另一个按钮中使用该值,并且存在问题。如果我试图返回该值,程序会说这个方法不应该返回值。以下是我的代码的样子:
int randomprocess;
- (IBAction)button:(id)sender {
randomprocess = rand() % 3;
// Do something }
- (IBAction)b1:(id)sender {
if (randomprocess == 0) {
// Do something
} else {
// Do something else
}
如果我不写第一行,第二个按钮将无法识别'randomprocess'。现在,当我宣布它仍然为零或我设置为相等的任何数字时。
答案 0 :(得分:2)
可能您已经声明了一个名称相同的iVar / property,它覆盖了您的全局变量。仅使用全局变量或 iVar。
方法或对象头之外的声明int randomprocess;
使其成为“正常”全局C变量。
iVar是与您的对象相关的本地变量。属性(通常)是具有特定访问者的iVar。 如果你同时声明了一个全局变量和一个本地变量(resp,一个iVar),那么全局变量不可见,但是被本地变量覆盖。
一般来说,使用全局变量是个坏主意。如果必须,请将其设为静态。更好的是使用iVar。
修改强> 要创建属性,标题应如下所示:
@interface myclass
@property (nonatomic,assign) int randomprocess;
// ...
@end
对于实施:
@implementation myclass
@synthesize randomprocess; // only for XCode < 4.4 needed
// ...
- (IBAction)button:(id)sender {
self.randomprocess = rand() % 3;
// Do something
}
- (IBAction)b1:(id)sender {
if (self.randomprocess == 0) {
// Do something
} else {
// Do something else
}
//
}
答案 1 :(得分:1)
或者你应该像这样声明你的变量
@interface myclass {
int randomprocess;
}
在.h文件中:或
@implementation myclass {
int randomprocess;
}
在.m文件中
这将声明没有属性的内部变量(iVar)
如果您在.m文件(第2个样本)中执行此操作,则此变量仅在当前文件中可用
如果您将在.h文件(第1个样本)中执行此操作,此变量将可用于当前.m和子类中