我不明白为什么当我点击OK按钮时面板不会立即关闭。
if (NSOKButton == [uploadPanel runModal]) {
for (int i = 0; i < 10000; i++) {
NSLog(@"%d",i);
}
}
相反,只有在范围内的所有陈述都被激活之前,它才会关闭。
当我将代码改为这样的代码时,结果变成了同样的结果,这很奇怪:
if (NSOKButton == [uploadPanel runModal]) {
NSLog(@"ok");
}
for (int i = 0; i < 10000; i++) {
NSLog(@"%d",i);
}
顺便说一句,NSSavePanel没有这样的问题。
有没有办法解决这个问题?
UPDATE1: 我尝试过Abhi Beckert提供的方法,但仍然不起作用:(
if (NSOKButton == [uploadPanel runModal]) {
NSLog(@"ok");
[uploadPanel close];
}
for (int i = 0; i < 10000; i++) {
NSLog(@"%d",i);
}
答案 0 :(得分:3)
它没有立即关闭,因为它没有。没有理由,这就是它的运作方式。
如果您需要提前关闭它,请手动关闭它:
[uploadPanel close];
答案 1 :(得分:0)
自己获取解决方案。虽然理想的解决方案是将循环放在另一个线程中,但是处理线程安全事件太困难了。另一种解决方案是以延迟的方式执行代码。 (如下图所示)
-(IBAction)upload:(id)sender {
NSOpenPanel *uploadPanel = [NSOpenPanel openPanel];
if ([uploadPanel runModal] == NSOKButton) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC / 100), dispatch_get_main_queue(), ^(void){
for (int i = 0; i < 10000; i++) {
NSLog(@"%d",i);
}
});
}
}