我有一個C文件和一個Objective C文件。
即,C文件是:CB.m
和CB.h
CB.m
包含c函數:callIncomings()
。這個函數必須是C函數,因爲它是一個回調函數。 (其簽名不可更改)指向外部對象的指針爲零
目標C文件是ViewController.h/.xib/.m
和IncomingCall.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。怎麼辦??!!我在哪裏錯了? 。
這兩個源文件都是Objective-C('.m')而不是C('.c')。 – trojanfoe
okie,那麼更改文件擴展名解決問題?即將Cb.m改爲CB.c – Vinayaka
你測試了你的'varViewController'變量嗎?你確定它已經被初始化了,而不是'nil'嗎?你說它是在'ViewController'的'viewDidLoad'中調用的,但是它被調用了嗎? – Guillaume