在NSObject类中使用NSTimer

时间:2013-04-25 13:05:26

标签: iphone objective-c nstimer

我在点击许多视图控制器中的按钮时显示自定义UIView(类似于UIAlertView)。所以,我在NSObject类中包含了该代码。我必须将UITableView显示为此自定义视图的子视图,并且我的一个UITableView单元格包含倒数计时器。我能够显示CustomView和UITableView。但是,我无法在此customView中实现NSTimer。

显示自定义视图的代码:

+(NSMutableDictionary *) printPopup:(UIView *)inputView {
    int i=20;

    UIView *myCustomView = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 280, 250)];
    [myCustomView setBackgroundColor:[UIColor colorWithRed:(247/255.0) green:(239/255.0) blue:(218/255.0) alpha:1]];
    UITableView *dynamicTable=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 280, 250) style:UITableViewStylePlain];
    dynamicTable.tag=55;
    [myCustomView addSubview:dynamicTable];    
    UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    //    [cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
    [cancelButton setBackgroundImage:[UIImage imageNamed:@"Delete3.png"] forState:UIControlStateNormal];
    [cancelButton setFrame:CGRectMake(250, 0, 30, 30)];
    cancelButton.tag=i+7;
    [myCustomView addSubview:cancelButton];
    [inputView addSubview:myCustomView];
    [UIView animateWithDuration:0.4f animations:^{
        [myCustomView setAlpha:1.0f];
    }];
    NSMutableDictionary *returnedDic=[[NSMutableDictionary alloc]init];
    [returnedDic setObject:dynamicTable forKey:@"Tableview"];
    [returnedDic setObject:cancelButton forKey:@"cancelButton"];
    return returnedDic;

}

+ (void)dismissCustomView:(UIButton *)sender
{
    [UIView animateWithDuration:0.2f animations:^{
        [sender.superview setAlpha:0.0f];
    }completion:^(BOOL done){
        [sender.superview removeFromSuperview];
    }];

}

当我尝试在此NSObject类中实现NSTimer时,我收到以下错误:

instance variable accessed in class method

我必须在这堂课中打电话给NSTimer。有没有其他选择。

请建议。

2 个答案:

答案 0 :(得分:1)

用于定义方法的语法是类方法(返回类型之前的小+)。如果您想要实例方法,则应使用减号-作为前缀。由于您似乎需要访问实例变量,因此您的方法可能应该是实例方法。

请注意,实例方法仍然可以访问所有静态“类”变量。

答案 1 :(得分:0)

回复:你评论。您不能在类方法中调用self,除非您引用的方法也是类方法。您的NSTimer timerWithInterval:方法违反了该方法。我猜timerFired:是一个实例方法?最简单的说法就是两个(实例和变量方法)不能在同一个类中交织在一起。