问题标签 [nsrunloop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
994 浏览

ios - 当主线程在IOS中被阻塞时,UIAlertView在线程中关闭

我有一个正在等待连接的应用程序。在应用程序等待时,我需要向用户显示 AlertView,它应该在某个时间后以编程方式或通过用户单击 AlertView 的取消按钮来关闭。

主线程正在等待客户端连接,而在另一个线程中,我正在创建并显示正在更新对话框时间的 AlertView。该线程有一个 NSRunLoop,它更新 AlertView 上的文本。

一切正常,除了 AlertView 不接收触摸事件,甚至它没有以编程方式被解雇。任何人都可以对我在这里可能做错的事情有所了解。

这是示例代码。

0 投票
1 回答
304 浏览

objective-c - 工作表窗口中的 NSTimer 未触发

我在面板中有一个计时器,我试图每秒触发一次,但是我似乎无法触发它。我正在创建我的面板,如下所示:

然后在我的 targetController 我有以下内容:

我的理解是,我通过添加带有 的计时器来正确执行此操作NSModalPanelRunLoopMode,但是即使这样做,我的 updateDisplay: 选择器也永远不会被触发。

有人对我在这里做错了什么有任何想法吗?

注意:我也尝试过NSDefaultRunLoopMode,但没有任何区别。计时器仍未触发。

编辑:我的总体目标如下 -

我的面板有一个表格视图,可以一次添加许多项目(来自多个线程)。所以我将项目添加到一个临时数组中,然后当计时器触发时,它将临时数组中的项目添加到主数组并重新加载表。以下是执行此操作的代码示例:

计时器更新时触发的方法:

不幸的是,如果没有计时器触发,我在表中根本没有任何条目。

下面是我正在尝试执行的操作的屏幕截图(条目已直接添加到主数组中。)

在此处输入图像描述

0 投票
2 回答
3747 浏览

objective-c - 在 NSOperation 中使用 NSThread sleep

使用一些代码时,我遇到了运行循环,这是我刚接触的,在NSOperations.

s正忙于下载数据——当他们忙时,有代码以s 和线程休眠NSOperation的形式等待下载完成。NSRunLoop

我特别感兴趣的是这段代码:

我已阅读有关运行循环的信息,runMode:beforeDate:并将等待输入源或超时。虽然我不是 100% 算作输入源。

在第一次执行时,它总是返回 NO 并点击sleepForTimeInterval:. 这很糟糕吗?

在特定的实用程序类中,它的sleepForTimeInterval:影响很大——每个线程一次——这会严重影响性能。

对此有更好的解决方案或建议吗?

0 投票
3 回答
12527 浏览

objective-c - iOS dispatch_async 和 NSURLConnection 委托函数没有被调用

我认为我已经编辑了这篇文章以使其更易于阅读。

在 dispatch_async 块中完成一些密集的字符串操作后,我需要调用 NSUrlConnection。

我调用的 URL 有 .htaccess 身份验证,所以我不能使用同步连接。

但是没有调用 NSURLConnection 委托方法。我知道 URL 在浏览器中大约 5 秒后加载,并且我已经使用没有身份验证的简单 URL 测试了代码,它没有任何区别。

是什么阻止了委托方法被调用?

这个函数做了一些字符串操作,需要一段时间才能完成:

这是在上面的块末尾调用的那个

更新:我也试过这个,因为它在另一个类似问题的答案中被接受,但它没有奏效:

基于这个问题:Why NSURLConnection delegate methods don't get call, when using the global dispatch queue?

0 投票
2 回答
1663 浏览

objective-c - 在iphone上通过ftp在后台上传文件

我正在尝试在应用程序中建立 FTP 连接。我想将几个文件上传到 FTP 服务器,所有文件都在一个目录中。所以首先我想创建远程目录。

此代码在使用以下调用在后台线程中执行时不起作用:

我的猜测是(后台线程)运行循环没有运行?如果我在主线程内发送消息,则上传工作正常:

由于主线程的运行循环已启动并正在运行。

但是要上传相当大的文件;所以我想把这个工作量放在后台线程中。但是我如何以及在哪里设置 NSRunLoop,以便整个上传发生在后台线程中?苹果关于 NSRunLoops 的文档(尤其是如何在不使用计时器/输入源的情况下启动它们,如本例)并没有帮助我。

0 投票
1 回答
718 浏览

iphone - 如何将 [NSRunLoop runUntilDate:] 重写为 GCD 代码?

只是出于我的好奇,我正在尝试重写以下代码

使用 Grand Central Dispatch 进入代码。

我尝试使用 dispatch_source_t、dispatch_semaphore_t 和 dispatch_after,但效果不佳:( 我需要你的帮助!

请注意,我不想用任何块包装 SVProgressHUD 的方法!

0 投票
1 回答
744 浏览

objective-c - 不同 runLoop 上的 HID 报告回调

我已经使用 IOHIDManagerScheduleWithRunLoop 在主线程 (runLoop) 上安排了 HIDManager。所以,我在主线程上得到了设备匹配和删除回调。

但是,我已经在另一个线程上安排了一个设备IOHIDDeviceScheduleWithRunLoop,比如说 Thread-1。根据它的文档,当我设置报告时,我应该在 Thread-1 RunLoop 上收到回调。

IOHIDDeviceScheduleWithRunLoop(inIOHIDDeviceRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);

但是,我在主线程上收到 HIDReport 回调。有什么帮助吗?

更新:

即使我删除了 IOHIDDeviceScheduleWithRunLoop,我也看到报告回调被调用。报告回调应该在设备 RunLoop 上调用。

根据 IOHIDManagerScheduleWithRunLoop 的文档,“这正式将 HID 管理器与客户端的运行循环相关联。此计划将传播到当前枚举的所有 HID 设备以及与 HID 管理器匹配的新 HID 设备”

这应该只用于匹配和删除,但我也得到了输入报告。

0 投票
2 回答
11447 浏览

objective-c - 无效后如何“验证” NSTimer?

所以基本上,我有这个计时器,当它收到一个按键事件时应该重复这个计时器,并在用户释放按键时失效。addTimer:forMode:但是,即使通过调用NSRunLoop ,我也无法“验证”计时器。有谁知道为什么会这样以及我该如何解决这个问题?谢谢。

0 投票
1 回答
442 浏览

objective-c - NSRunLoop 只运行直到所有事件都完成

NSRunLoop 和 CFRunLoop 中有方法,要运行到特定时间 CFRunLoopInMode 和 NSRunLoop - runUntillDateT

这些方法指定运行的时间,直到。

但是,我想处理 runLoop 中的所有消息,如果它完成并且空闲则退出。因为一些 runLoop 源可以有无限的时间来处理。所以,我不能说时间。

0 投票
1 回答
213 浏览

ios - HttpConnection、UITableView 和 RunLoops 以及从磁盘加载

我正在将图像加载到表格视图的大网格中。它们来自网络,但一旦下载它们就会被缓存到磁盘。

我用这个:

以确保它们在我仍在滚动时加载到视图中。工作正常。

但是,当我重新访问它们并且它们正在从磁盘加载时 - 我没有相同的 scheduleInRunLoop 方法可以使用......我可能会,但我不知道它在哪里。

有没有人有任何想法?

谢谢