Iphone 刷新视图控制器.m

Iphone 刷新视图控制器.m,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我有一张从网络服务器上随机抽取的问卷表。我需要有一个按钮执行(setNeedsDisplay)刷新页面。。。我单击按钮时应用程序崩溃,出现错误: *由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[ExercisesViewController setNeedsDisplay]:未识别的选择器已发送到实例0x6a1e840' ***第一次抛出调用堆栈: (0x13f3022 0x1584cd6 0x13f4cbd 0x1359ed0 0x1359

我有一张从网络服务器上随机抽取的问卷表。我需要有一个按钮执行(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];

}

这是语法问题吗?我读到它与线程有关。有人能解释一下线程吗?或者有更直接的方法吗? 提前使用Thanx…

使用:

[self.view setNeedsDisplay];
使用:


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

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

视图更新应该在主线程上完成

使用


视图更新应该在主线程上完成

使用


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

即:


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

即:


您不应该在后台threadtrue中使用UIView进行操作。说得好。我的重点是在view vs.controller上调用setNeedsDisplay。你不应该在后台线程中使用UIView。说得好。我的重点是调用setNeedsDisplay on the view vs.controller.setNeedsDisplay仅更新脏标志,以便在下一次绘制时渲染视图,您不需要waitUntilDone:YES.setNeedsDisplay仅更新脏标志,以便在下一次绘制时渲染视图,您不需要waitUntilDone:是的。好消息是它不会崩溃,但视图不会刷新。setNeedsDisplay方法所做的是,在下一个事件生命周期中将此视图标记为重画,这会导致调用UIView的drawRect:方法,视图被重画,其层被缓存在GPU中。因此,如果调用setNeedsDisplay的视图不是具有已实现drawRect:method的子类视图,则setNeedsDisplay不适合您的需要,您需要另一种方法来完成任务。不幸的是,如果您不显示更多代码,我们将无法帮助您。好消息是它不会崩溃,但视图不会刷新。setNeedsDisplay方法所做的是在下一个事件生命周期中将此视图标记为重画,这将导致调用UIView的drawRect:方法,视图被重新绘制,其层被缓存在GPU中。因此,如果调用setNeedsDisplay的视图不是具有已实现drawRect:method的子类视图,则setNeedsDisplay不适合您的需要,您需要另一种方法来完成任务。不幸的是,如果您不显示更多代码,我们将无法帮助您。我的调查问卷位于视图控制器本身,而不是UIView上。我如何实现这一点?在iAction?中,在错误消息中,接收器是UIViewController-这就是错误所在。UIViewController有一个名为“view”的成员,您可以访问该成员。我的调查问卷位于视图控制器本身而不是UIView上。我如何实现这一点?在iAction?中,在错误消息中,接收器是UIViewController-这就是错误所在。UIViewController有一个名为“视图”的成员,您可以访问该成员。
[self.view setNeedsDisplay];
[self.view performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];
    dispatch_async(dispatch_get_main_queue(), ^{
      [self.view setNeedsDisplay];
    });