问题标签 [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 投票
1 回答
546 浏览

objective-c - HTTP 服务器在 Cocoa 应用程序中工作,但在测试用例中不工作——运行循环问题?

我正在尝试向这个SimpleHTTPServer 示例添加一个 GHUnit 测试用例。该示例包括一个对我来说很好的 Cocoa 应用程序。但我无法在测试用例中复制该行为。

这是测试类:

我尝试通过 NSURLRequest 以及(在 期间sleep)通过网络浏览器发送请求。委托方法-processURL-stopProcessing永远不会被调用。问题似乎是[fileHandle acceptConnectionInBackgroundAndNotify]SimpleHTTPServer-initWithTCPPort:delegate:没有导致任何 NSFileHandleConnectionAcceptedNotifications 到达 NSNotificationCenter - 所以我怀疑涉及运行循环的问题。

问题似乎出在 NSFileHandle 上,而不是 NSNotificationCenter 上,因为当[nc postNotificationName:NSFileHandleConnectionAcceptedNotification object:nil]添加到 的末尾时initWithTCPPort:delegate:,NSNotificationCenter 确实会收到通知。

0 投票
1 回答
2920 浏览

objective-c - 在 iOS 上使用多个 NSTimer - 只有一个计时器触发

需要帮助解决问题。

目标
我正在组装一个 iOS 图书应用程序,它使用 NSTimers 在加载视图后触发几个交错的动画事件。我创建了一个MethodCallerWithTimer类来帮助我做到这一点(底部的代码)。

到目前为止我的解决方案
当我使用MethodCallerWithTimer类时,我将 objectOwningMethod 分配为我的 UIViewController 子类对象(它是一个书页),然后将该方法作为该类中的实例方法。这是我指定的方法的示例 - 非常简单地打开屏幕上的一些艺术品:

我的问题
当我创建多个MethodCallerWithTimer实例然后加载视图并启动它们时,我只会让第一个事件发生。其他计时器都没有调用它们的目标方法。我怀疑我不明白我要求 NSRunLoop 做什么或类似的事情。

有什么想法吗?

这是我的MethodCallerWithTimer类:

和实施:

0 投票
2 回答
7016 浏览

concurrency - 异步 NSURLConnection,并发 NSOperation,什么时候使用 NSRunLoop?

我正在尝试在辅助线程中运行 NSURLConnection 异步(目标是 iOS4),为此我创建了一个并发 NSOperation,我想我快到了,但不清楚以下内容:

1) 在 iOS4 NSOperationQueue addOperation 在新线程中开始操作,因为使用 GCD,基于Technical Q&A QA1712但是,我的测试(模拟器和 iPad)显示 start() 总是在主线程上调用,任何想法,我需要在这里检查一下:如果在主线程上然后产生一个新线程?

2) 如果 start 实际上是通过 addOperation() 在辅助线程上调用的,那么我可以通过在当前 NSRunLoop 上调度来启动我的异步 NSURLConnection:

就像这里的 LinkedImageFetcher 示例一样,在完成之前我不需要循环:

3) 假设在主线程上调用了我的自定义 NSOperation start() 并且 2) 是正确的,并且我在 start() 中生成了一个新线程来调用我的自定义 main() 方法:

在我的 main() 中,我确实需要运行当前线程运行循环:

这是我设法在并发 NSOperation 中运行 NSURLConnection 的唯一实例,但我不确定我是否需要运行 RunLoop,如果 GCD 作为技术说明状态提供线程,我可以按照逻辑在 2) 中还是我仍然需要运行线程的 runloop?如何测试 GCD 提供的线程?

非常感谢您的任何说明

0 投票
1 回答
419 浏览

iphone - 从命令行程序从 iPhone 获取加速度计数据?

请查看以下要点:

https://gist.github.com/969112

本质上,我正在尝试设置一个UIAccelerometerDelegate并让它从命令行 iPhone 应用程序接收数据(即它已越狱,我通过 ssh 连接到手机并在 iPhone 本身上编译上述代码)。

上面的代码不起作用......即使应用程序位于它的运行循环中,并且UIAccelerometer它的委托处于活动状态,也没有调用任何回调......

我有点不知道还需要什么。我只是想获得获取加速度计数据的最简单的“hello world”示例(不涉及 UI 的所有膨胀并运行完整的应用程序).​​.....

那么有什么想法吗?提前致谢!

0 投票
3 回答
426 浏览

iphone - 在这种情况下,我是否需要将运行循环与我的 NSTimer 一起使用?

我不想 sleep() 我的应用程序,但我确实希望它等待我的计时器完成它的操作(基本上更新 4 个 UILabel,每秒一个)。

在计时器完成后,我想在主循环中回火一些代码 - 我希望它等到计时器完成。目前,主循环启动计时器,然后直接进入下一个代码块(而计时器在后台滴答作响)。但实际上,我希望计时器完成对 4 个 UILabel 的更新,然后我希望主程序触发下一个代码块。

我在谷歌上搜索并在 YouTube 上观看了几个糟糕的教程,但我认为我应该使用运行循环。这是正确的吗?

0 投票
1 回答
870 浏览

iphone - NSTimer 在单独线程上的不当行为

我正在尝试将 NSTimer 安排在一个单独的线程上,这就是我的做法。

timerFireMethod 旋转我的微调器,当按下按钮(停止按钮)时,我使计时器无效并退出此方法中的线程。如果按下旋转按钮,我会在这里进行轮询。

问题是,我的 timerFireMethod 第一次被正确调用。Spinner 第一次旋转。但是当我停止我的微调器并重新启动它时,微调器不旋转。日志说第二次我的“startSpinner”方法被调用但“timerFireMethod”方法没有被调用。

更糟糕的是,微调器在模拟器上工作 5-6 次,在 2g 设备上工作 1 次,在最新的 ipod 上工作 4-5 次。它的随机。

这基本上是如何工作的?可能是什么问题呢?

0 投票
1 回答
1205 浏览

iphone - AVPlayerStatus 与 AVPlayerItemStatus

问题是player.statusAVPlayerStatusReadyToPlay在 player.currentItem.status 返回前整整 2 秒返回AVPlayerItemStatusReadyToPlay。有没有人对为什么会发生这种情况有任何有用的解释?
这只是示例代码,用于显示正在发生的事情的基本概念,因此如果有任何拼写错误或其他任何错误,请忽略它们。

0 投票
2 回答
15531 浏览

objective-c - 保持 NSThread 存活并在其上运行 NSRunLoop

所以我正在启动一个新的 NSThread,我希望以后可以通过调用performSelector:onThread:.... 根据我对调用该方法的理解,该方法将该调用添加到该线程上的 runloop,因此在其下一次迭代中,它将弹出所有这些调用并随后调用它们,直到没有任何东西可以调用。所以我需要这种功能,一个准备好工作的空闲线程,我可以调用它。我当前的代码如下所示:

但是线程没有保持活动状态,并且 performSelector:onThread 不做任何事情。我该如何以正确的方式解决这个问题?

0 投票
3 回答
4316 浏览

iphone - NSTimer 失效后后台线程 NSRunloop 运行不退出!为什么?

我正在创建一个 NSTimer 并将其添加到后台线程的运行循环中。我的代码就像这个答案的后台线程示例:iPhone-SDK:Call a function in the background?

在创建计时器并将其从 gdb I 附加到运行循环后po runLoop,它会输出以下内容:

这表明 1 个计时器已附加到 runloop 之后,在我使计时器无效之后, NSRunloop 运行方法不会退出,但是在我暂停调试器并从 gdb 中我po runLoop再次看起来像这样:

现在“计时器”条目有 0 个对象。但线程继续运行。我经常离开屏幕然后回来,所以这会导致后台线程的建立,在使用太多资源后最终会杀死应用程序。定时器在失效后不会触发,但后台线程仍然存在。

我知道我可以将计时器移回主线程或使用 NSThread sleepForTimeInterval 创建自己的简单计时器线程,但我想保留主线程以进行 GUI 更新并尽可能使用 NSTimer。

0 投票
1 回答
1882 浏览

iphone - 将捏/缩放效果添加到 UIScrollView 内的 UIImageView

我有一个非常基本的屏幕共享 iPhone 应用程序,我已经成功地将捏/缩放效果添加到我的应用程序中,UIImageView使用UIScrollView.

UIImageView定期从 PC 接收屏幕内容。一切正常,但是一旦我滚动/捏合/缩放,它首先会起作用,但随后会停止,即使服务器仍在发送屏幕内容,更新图像视图内容的委托方法也会停止启动。整个应用程序似乎被冻结但没有错误消息/异常/无论如何。任何人都可以帮助我吗?