Kri*_*ris 4 macos cocoa objective-c callback
我正在整理Mac OS X应用程序,我正在尝试注册接收显示重新配置通知,但我现在很丢失.我一直在阅读Apple的文档和一些论坛帖子等等,但是一切似乎都假设对事物的了解比我显然拥有的要好.我知道我必须在运行循环中请求回调才能正常工作.不过,我不知道如何为它设置一个基本的运行循环.我也觉得Apple在他们的文档中的例子是缺少他们期望我已经知道的东西.在这里展示我的无知是我觉得事情应该是什么样子.
NSRunLoop *rLoop = [NSRunLoop currentRunLoop];
codeToStartRunLoop
void MyDisplayReconfigurationCallBack (
CGDirectDisplayID display,
CGDisplayChangeSummaryFlags flags,
void *userInfo);
{
if (flags & kCGDisplayAddFlag) {
NSLog (@"Display Added");
}
else if (kCGDisplayRemoveFlag) {
NSLog (@"Display Removed");
}
}
CGDisplayRegisterReconfigurationCallback(MyDisplayReconfigurationCallBack, NULL);
Run Code Online (Sandbox Code Playgroud)
我得到的实际代码来自Apple的示例,但它告诉我这flags是一个未声明的标识符,并且不会编译.并不是说它能正常工作,因为我没有在运行循环中使用它.我希望找到一个教程,解释在运行循环中注册系统回调但是没有成功.如果有人能指出我正确的方向,我会非常感激.
(我相信你能从我的问题中说出我很绿.我自学了Objective-C作为我的第一门编程语言.我跳过C,所以偶尔我遇到了一些我无法弄清楚的障碍.)
如果您正在编写Mac OS X应用程序,AppKit已经为您设置了一个运行循环,因此您无需担心该部分.当你也在创建自己的线程时,你真的只需要在Cocoa中创建自己的运行循环.
对于"未声明的标识符"部分,它看起来像是由于拼写错误/语法错误:
void MyDisplayReconfigurationCallBack (CGDirectDisplayID display,
CGDisplayChangeSummaryFlags flags,
void *userInfo);
// Semicolon makes this an invalid function definition^^
{
// This is an anonymous block,* and flags wasn't declared in it
if (flags & kCGDisplayAddFlag) {
// etc.
}
Run Code Online (Sandbox Code Playgroud)
此外,与其他语言不同,您不能在其他函数,方法或块*中声明或定义函数 - 它们必须位于文件的顶层.你不能把它放在你打电话的地方CGDisplayRegisterReconfigurationCallback.
就像一个示例(我不知道你的代码的其余部分是什么样子):
// MyClassThatIsInterestedInDisplayConfiguration.m
#import "MyClassThatIsInterestedInDisplayConfiguration.h"
// Define callback function at top level of file
void MyDisplayReconfigurationCallBack (
CGDirectDisplayID display,
CGDisplayChangeSummaryFlags flags,
void *userInfo)
{
if (flags & kCGDisplayAddFlag) {
NSLog (@"Display Added");
}
else if (kCGDisplayRemoveFlag) {
NSLog (@"Display Removed");
}
}
@implementation MyClassThatIsInterestedInDisplayConfiguration
- (void) comeOnBabyAndDoTheRegistrationWithMe {
// Register callback function inside a method
CGDisplayRegisterReconfigurationCallback(MyDisplayReconfigurationCallBack,
NULL);
}
@end
Run Code Online (Sandbox Code Playgroud)
*基本的C卷括号分隔的东西,而不是新酷的Obj-C ad hoc函数的东西.
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |