2012-10-17 4 views
1

C 파일과 Objective C 파일이 있습니다.
즉, C 파일 : CB.mCB.h
CB.m은 c 함수 : callIncomings()을 포함합니다. 이 함수는 콜백 함수이기 때문에 C 함수 여야합니다. (해당 서명을 변경할 수 없음)외부 객체에 대한 포인터가 없습니다.

목표 C 파일은 ViewController.h/.xib/.mIncomingCall.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; 

: 다음 코드 enter image description here

+0

두 소스 파일 모두 Objective-C ('.m')가 아니고 C ('.c')가 아닙니다. – trojanfoe

+0

okie, 그래서 파일 확장명을 변경하면 문제가 해결됩니까 ?? Cb.m을 CB.c로 바꾸는 것 – Vinayaka

+2

'varViewController' 변수를 테스트 했습니까? 초기화되지 않았으며'nil'이 아닌 것이 확실합니까? 당신은 그것이'ViewController'의'viewDidLoad'에서 호출되었지만 그것이 호출 되었습니까? – Guillaume

답변

4

문제는의 선언입니다.

static 키워드는 해당 헤더 파일을 포함하는 모든 소스 파일에서 로컬로 (내부 링크가 있음)이라는 변수가 만들어 짐을 의미합니다. 그러므로 CB.m에 사용 된 varViewController은 에 (실제 초기화되지 않은) 포인터와 다른 입니다.

수정이 오류로 :

extern ViewController* varViewController; 

(그리고이 ViewController.mstatic로 정의되지 것 확인, 다른 사용자가 링크 오류를 얻을 수 있습니다).

0

쓰기 ...

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


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

좀 더 설명 프라 사드, 도움이 될 것입니다. – Vinayaka

관련 문제