好吧,这是我的第一篇文章,而且在objective-c上仍然相当新,但是在这里:
我目前正在创建一个项目,该项目将创建第二个队列以生成一堆NSTimers并将其设置为关闭。由于我不想停止主要排队,我认为大中央车站是最好的路线。
目前,我有一个执行以下操作的UIButton:
- (IBAction)runTest:(id)sender {
if (!timerQueue) {
timerQueue = dispatch_queue_create("com.myApp.timerQueue", DISPATCH_QUEUE_SERIAL);
}
dispatch_async(timerQueue, ^{[self initiateTest];});
然后......
- (void) initiateTest {
// code to generate timers and execute
}
与viewController关联的头文件发生了这一切,如下所示:
@interface ViewController : UIViewController <SomeOtherMgrDelegate> {
dispatch_block_t timerQueue;
}
...
- (IBAction)runTest:(id)sender;
- (void) initiateTest;
问题似乎与行
有关timerQueue = dispatch_queue_create("com.myApp.timerQueue", DISPATCH_QUEUE_SERIAL);
这会产生一个相当冗长的语义问题:
从不兼容类型'dispatch_queue_t'(又名'NSObject *')
分配给'__strong dispatch_block_t'(又名'void(^ __ strong)(void)')
知道为什么会出现这个错误?在文档中似乎认为这是正确的方法。
感谢;如果我的代码中还有其他内容可能对您有用,请告诉我们!
编辑:所以这是一个相当愚蠢的错误,但对于其他人:确保类型匹配(块/ =队列!)。与viewController关联的.h文件应该如下所示:@interface ViewController : UIViewController <SomeOtherMgrDelegate> {
dispatch_queue_t timerQueue; // This is where the problem was.
}
...
- (IBAction)runTest:(id)sender;
- (void) initiateTest;
答案 0 :(得分:0)
您将timerQueue
声明为dispatch_block_t
的实例,当它应为dispatch_queue_t
时,返回类型为dispatch_queue_create()
答案 1 :(得分:0)
阅读错误。查看文档以获取dispatch_queue_create
的返回值。最后看看你如何声明timerQueue
。这是错误的类型。
你需要:
@interface ViewController : UIViewController <SomeOtherMgrDelegate> {
dispatch_queue_t timerQueue;
}