我在模拟期间更新我的customView对象时遇到问题。模拟完成后,窗口会弹出。我希望它在模拟过程中自我更新。为此,我使用setNeedsDisplay:YES
,我也尝试了display
。然而,这对我来说都不适用。有谁知道我应该如何使这个工作?正如您在下面看到的,我尝试为更新创建一个新线程以及使用NSOperations。感谢帮助!
//Run simulation
for (int iteration=0; iteration<numberOfIterations; iteration++){
//NSInvocationOperation *update = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updatePopulation) object:nil];
//NSInvocationOperation *draw = [[NSInvocationOperation alloc] initWithTarget:view selector:@selector(redraw) object:nil];
//[draw addDependency:update];
//[queue addOperation:update];
//[queue addOperation:draw];
[NSThread sleepForTimeInterval:0.01]; //to make it easer to see..
[self updatePopulation];
//[view redraw];
[NSThread detachNewThreadSelector:@selector(redraw) toTarget:view withObject:nil];
//[self performSelector:@selector(updatePopulation) withObject:nil afterDelay:1];
//[view performSelector:@selector(redraw) withObject:nil afterDelay:1];
//Save segregation
if (iteration%(numberOfIterations/100) == 0) {
printf("hej\n");
}
}
在我的观众班中:
- (void) redraw {
//[self setNeedsDisplay:YES];
[self display];
}
答案 0 :(得分:3)
看起来你正试图在工作线程上进行绘画。
据我所知,这不是支持的。
要解决此问题,您需要将模拟移动到工作线程,然后使用performSelectorOnMainThread:调用主线程上的重绘。在尝试实现线程化可可应用程序时,我发现需要阅读this article on threading in cocoa。