C 파일과 Objective C 파일이 있습니다.
즉, C 파일 : CB.m
및 CB.h
CB.m
은 c 함수 : callIncomings()
을 포함합니다. 이 함수는 콜백 함수이기 때문에 C 함수 여야합니다. (해당 서명을 변경할 수 없음)외부 객체에 대한 포인터가 없습니다.
목표 C 파일은 ViewController.h/.xib/.m
및 IncomingCall.h/.m/.xib
입니다.
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;
}
에 다음 코드를했습니다 다음 ViewController.h에 다음 이제
, 내가 선언 한
static ViewController* varViewController;
는 viewDidLoad
에, 나는 지정
이 함수는에서 호출됩니다 :
- (IBAction)DemoCall:(id)sender {
callIncomings(1, "from C file");
}
프로젝트가 제대로 빌드되지만보기 IncomingCall()
이 표시되지 않습니다.
왜 아이디어가 ??
EDIT : 또한 C 함수를 일반화하고 ABCD.view 또는 IncomingCall 뷰와 같은 다른 뷰를로드하려면이 함수를 일반화 할 수있는 방법을 알고 싶습니다.
편집 2 :이 질문은 여기에서 연속성 할 수 있습니다 : C function calling objective C functions
일부 부연 설명 : 나는 viewcontroller.m 파일에 callIncoming 기능을 넣어 , 그것은 괜찮 았는데. 하지만 이제는 다른 파일에 CB.m 파일을 별도로 배치하려고합니다.
그래서 varViewController에 대한 의심에 대답합니다. DemoCall 함수는 ViewController 파일에 있습니다. IBAction을 확인하면 IncomingCall 함수가 확실히 호출됩니다.
입력 : 예, 누군가 지적했듯이 사실입니다. varViewController는 NULL 인 것 같습니다. 이제 뭐??!! 나는 어디로 잘못 가고 있니? . ViewController.h
에서
static ViewController* varViewController;
: 다음 코드
두 소스 파일 모두 Objective-C ('.m')가 아니고 C ('.c')가 아닙니다. – trojanfoe
okie, 그래서 파일 확장명을 변경하면 문제가 해결됩니까 ?? Cb.m을 CB.c로 바꾸는 것 – Vinayaka
'varViewController' 변수를 테스트 했습니까? 초기화되지 않았으며'nil'이 아닌 것이 확실합니까? 당신은 그것이'ViewController'의'viewDidLoad'에서 호출되었지만 그것이 호출 되었습니까? – Guillaume