0

所以我有一个设置整数的方法:-(void)setcurrentviewfromint:(int)currentint{它在一个名为MyView. 从我的viewDidLoad方法中,我调用它,并将其设置为 1: currentview是 int 类型,在我的头文件中创建

- (void)viewDidLoad
{
    [super viewDidLoad];
    MyView *myview = [[MyView alloc]init];
    [myview setcurrentviewfromint:1];
}

然后,在 中MyView.m,我有这些课程:

-(void)setcurrentviewfromint:(int)currentint{
    currentview = currentint;
    NSLog("currentviewis:%d",currentview);
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    NSLog(@"drawRectCalled");
    if (currentview == 1) {
        NSLog(@"do something here");
        }
    }

}

但是调试器会打印出:

2012-07-18 18:02:44.211 animation[76135:f803] currentviewis:1
2012-07-18 18:02:44.223 animation[76135:f803] drawRectCalled

但不打印“在这里做点什么”。任何想法为什么currentview不等于1?

4

2 回答 2

2

首先,关于你的问题。当前视图是什么数据类型?其次,它看起来像 setcurrentviewfromint 中的 NSLog:从不被调用。如果它被调用,您会看到“currentviewis:1”,因此请确保正确连接。

而且,我必须说,骆驼案!您的方法名称都是小写的,很难阅读。:)

于 2012-07-18T22:34:47.977 回答
0

问题是您正在设置的 MYView 不是您正在从中读取 currentView 的那个。

在 viewDidLoad 中,您正在创建一个局部变量 myView,然后设置它的当前视图,然后这个 myView 成为内存泄漏,因为没有任何东西指向它。

假设 MyView 是 viewDidLoad 所在的类,并且 currentview 是该类的 int 属性(尽管为什么方法不是 setcurrentview :) 。我希望代码更像

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self setcurrentviewfromint:1];
}

从而设置当前视图本身

正如其他人所说,请使用CamelCase的Objective C标准

于 2012-07-18T22:36:52.640 回答