Objective c 如何链接到C代码块中的委托

Objective c 如何链接到C代码块中的委托,objective-c,c,macos,cocoa,Objective C,C,Macos,Cocoa,我的cocoa视图控制器中有C代码和Objective-C代码。目前,我通过引用objective-c self和一个全局self变量将两者联系起来,然后使用该变量在c中访问 当我想从我的C代码块中调用Objective-C方法时,这种方法就起作用了。 但是现在我试图通过我的c代码访问一个属性,比如so[selfGlobal delegate],但在运行时返回null 引用我的委托属性的正确方法是什么 这是我的代码和我的调试器输出,显示了Objective-C块中代码的预期输出,也显示了当我尝试

我的cocoa视图控制器中有C代码和Objective-C代码。目前,我通过引用objective-c self和一个全局self变量将两者联系起来,然后使用该变量在c中访问

当我想从我的C代码块中调用Objective-C方法时,这种方法就起作用了。 但是现在我试图通过我的c代码访问一个属性,比如so
[selfGlobal delegate]
,但在运行时返回null

引用我的委托属性的正确方法是什么

这是我的代码和我的调试器输出,显示了Objective-C块中代码的预期输出,也显示了当我尝试在C中链接到我的委托时的意外输出。请记住,这在我调用方法时有效,但在我尝试链接到委托属性时无效

记录预期输出的Objective-C代码块:

-(id)initWithDelegate:(id)aDelegate withWindow:(NSWindow*)aWindow{
    self = [super init];
    if(self){
        delegate = aDelegate;
        NSLog(@"delegate: %@", delegate);

        window = aWindow;
    }
    return self;
}
SEL selector = @selector(PKFPSetProgressMaxCount:);
if ([delegate respondsToSelector:selector]) {
    [delegate PKFPSetProgressMaxCount:maxEnrollCount];
}
我是如何在Objective-C方法中调用委托方法的:

-(id)initWithDelegate:(id)aDelegate withWindow:(NSWindow*)aWindow{
    self = [super init];
    if(self){
        delegate = aDelegate;
        NSLog(@"delegate: %@", delegate);

        window = aWindow;
    }
    return self;
}
SEL selector = @selector(PKFPSetProgressMaxCount:);
if ([delegate respondsToSelector:selector]) {
    [delegate PKFPSetProgressMaxCount:maxEnrollCount];
}
下面是我如何尝试在后台线程中运行的C函数中链接到我的委托。我还尝试在调试时注销委托属性的值

 NSLog(@"enroll, selfglobal delegate: %@", [selfGlobal delegate]);
if([selfGlobal delegate]){
    NSLog(@"delegate is not empty");
}
else{
    NSLog(@"delegate is empty");
}

SEL selector = @selector(PKFPDidReceiveActionMessage:);
if ([[selfGlobal delegate] respondsToSelector:selector]) {
    NSLog(@"delegate does have PKFPDidReceiveActionMessage in it");

    [[selfGlobal delegate] PKFPDidReceiveActionMessage:@"Say a word"];
}
else{
    NSLog(@"delegate does not have PKFPDidReceiveActionMessage in it");

}
这是我在调试器中得到的输出

//参考1中的值
初始化方法调用
窗口没有调用加载方法
代表:
初始化设备方法调用
//参考文献2
-[MainScreenWC PKFPSetProgressMaxCount:]
//这些调用是在中调用c函数之前进行的
-[主屏幕用户:]
-[MainScreenWC PKFPSetUIControlsEnabled:]启用uicontrols:0
//Ref 3-这在C函数内部,委托返回null
注册,自全局委托:(空)
委托为空
委托中没有PKFPDidReceiveActionMessage
有人能帮忙吗

更新1

id-selfGlobal正在创建协议的同一文件中设置

下面是我试图从内部访问委托的C函数

void FTR_CBAPI UserCallBack(
                            FTR_USER_CTX Context,
                            FTR_STATE StateMask,
                            FTR_RESPONSE *pResponse,
                            FTR_SIGNAL Signal,
                            FTR_BITMAP_PTR pBitmap)
{
    //This method is automatically called by the API that I am working with. 
    //I need to have access to the Objective-C delegate variable from within this code block, but the delegate is returning null only in here.
    ...

}

原来我只需要手动合成委托属性,因为某种原因它不喜欢自动合成。如果有人能解释为什么会这样,那么请编辑这篇文章来添加更多信息

我现在得到了正确的输出:

委托不为空
委托中确实包含PKFPDidReceiveActionMessage
-[MainScreenWC PKFPDidReceiveActionMessage:]操作消息:说一句话

请,请复制您的代码,而不是显示屏幕截图。查看如何启动线程也会很有帮助。考虑到线程可以接收参数,我有点惊讶你决定使用全局变量。我使用全局变量,因为C函数是来自API的回调函数,所以更改变量-我确定-将阻止回调函数被调用。为什么这会被否决?好的,伙计们,嘘,我不知道上传图片有那么糟糕。对不起,我已经更新了帖子,现在请,请撤销那些否决票,这样我们就可以再次上路了。