刷新视图controller.m

时间:2012-04-26 12:58:44

标签: iphone objective-c ios xcode

我有一个从网络服务器中随机抽取问卷的表格。我需要一个按钮执行(setNeedsDisplay)刷新页面...当我点击错误按钮时,应用程序崩溃了:

*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [ExercisesViewController setNeedsDisplay]:无法识别的选择器发送到实例0x6a1e840' ***第一次抛出调用堆栈: (0x13f3022 0x1584cd6 0x13f4cbd 0x1359ed0 0x1359cb2 0x963054 0x974fc6 0x57c0 0x13f4e99 0x4014e 0x400e6 0xe6ade 0xe6fa7 0xe6266 0x301a1a 0x13c799e 0x135e640 0x132a4c6 0x1329d84 0x1329c9b 0x12dc7d8 0x12dc88a 0x3d626 0x1f96 0x1f05) 终止调用抛出异常*

//Add refreshing agenda
    scrollViewFrame = CGRectMake(0, 200, 80, 40);
    mark = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    mark.frame = scrollViewFrame;
    [mark setTitle:@"Get Score" forState:UIControlStateNormal];
    [mark setBackgroundColor:[UIColor clearColor]];

    [mark addTarget:self 
             action:@selector(markButtonSelected:) forControlEvents:UIControlEventTouchUpInside];
    [scrollView addSubview:mark];

...

- (IBAction)markButtonSelected:(id)sender{
[self performSelectorInBackground:@selector(setNeedsDisplay) withObject:nil];

}

这是语法问题吗?我读到here它与线程有关。有人可以解释线程或有更直接的方法吗? Thanx提前...

4 个答案:

答案 0 :(得分:4)

setNeedsDisplay方法是UIView方法,而不是UIViewController。在markButtonSelected:方法中,只需添加:[self.view setNeedsDisplay];

答案 1 :(得分:0)

使用:

[self.view setNeedsDisplay];

答案 2 :(得分:0)

应该在主线程上查看更新。

使用

[self.view performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];

答案 3 :(得分:0)

您需要在UIView上调用setNeedsDisplay,而不是UIViewController。异步执行此操作会产生更好的性能。使用GCD进行异步工作是Apple的首选方式。

即:

    dispatch_async(dispatch_get_main_queue(), ^{
      [self.view setNeedsDisplay];
    });