指向外部对象的指针为零

时间:2012-10-17 10:24:58

标签: iphone objective-c c

我有一个C文件和一个Objective C文件 即,C文件为:CB.mCB.h
CB.m包含c函数:callIncomings()。此函数必须是C函数,因为它是一个回调函数。 (其签名无法更改)

Objective C文件是,ViewController.h/.xib/.mIncomingCall.h/.m/.xib

现在, 我在ViewController.h中声明了以下内容

static ViewController* varViewController;

viewDidLoad中,我指定:

varViewController = self;

我在CB.m

中有以下代码
#include <stdio.h>
#import "ViewController.h"
#import "IncomingCall.h"

int callIncomings(int a, char* b)
{

    IncomingCall *obj = [[IncomingCall alloc]initWithNibName:@"IncomingCall" bundle:nil];
    //NSString *temp =
    //NSString* string =
    obj.tempAddress = [NSString stringWithFormat:@"%s" , b];

    [obj setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [varViewController presentModalViewController:obj animated:YES];

    [obj release];

    return 1;
}

此功能在:

中调用
- (IBAction)DemoCall:(id)sender {
    callIncomings(1, "from C file");    
}

项目构建正常,但视图IncomingCall()未显示。

任何想法为什么??

编辑:另外,我想知道,如果我想概括C函数并加载一些不同的视图,如ABCD.view或IncomingCall视图,我该如何推广这个函数。

编辑2:此问题可以是此处的连续性:C function calling objective C functions

一些澄清: 当我将callIncoming函数放在viewcontroller.m文件中时,它工作正常。但现在我想将它单独放在另一个文件中,因此放在CB.m文件中 这样就回答了你对varViewController的疑问。 DemoCall函数在ViewController文件中,如果你注意到它是一个IBAction,那么是的,函数IncomingCall肯定会被调用。

输入:是的,就像有人指出的那样,它的真实,varViewController似乎是NULL。怎么办??!!我哪里错了? 。enter image description here

2 个答案:

答案 0 :(得分:4)

问题在于声明:

static ViewController* varViewController;
ViewController.h中的

static关键字表示将在包含该头文件的每个源文件中创建本地(它具有内部链接)变量。因此,varViewController中使用的CB.m是指向ViewController.m中实际值的不同(未初始化)指针。

使用以下方法更正此错误:

extern ViewController* varViewController;

(并确保static内未将其定义为ViewController.m,否则会导致链接失败。

答案 1 :(得分:0)

编写以下代码......

#include <stdio.h>
#import "ViewController.h"
#import "IncomingCall.h"


static  int callIncomings(int a, char* b);