2012-09-28 6 views
0

테이블 높이를 부동 상태로 유지하려고합니다. 이렇게 좋은 수업을 발견했습니다 : http://forums.macnn.com/t/224809/nsmutablearray-vs-a-plain-c-array-for-storing-floats.Objective-C에서 C 함수를 호출하면 값이 전달되지 않습니다.

문제는 다른 파일에있는 C 함수가 호출되면 전달 된 float가 0이된다는 것입니다. 이는 float 값과 상관없이 매번 발생합니다.

C 기능 :

typedef struct 
{ 
    float *array; 
    int count; 
} floatArray; 

BOOL AddFloatToArray (floatArray *farray, float newFloat) 
{ 
    if (farray->count > 0) 
    { 
     // The array is already allocated, just enlarge it by one 
     farray->array = realloc (farray->array, ((farray->count + 1) * sizeof (float))); 

     // If there was an error, return NO 
     if (farray->array == NULL) 
      return NO; 
    } 
    else 
    { 
     // Allocate new array with the capacity for one float 
     farray->array = (float *)malloc (sizeof (float)); 

     // If there was an error, return NO 
     if (farray->array == NULL) 
      return NO; 
    } 
    printf("Adding float to array %f\n", newFloat); 
    farray->array[farray->count] = newFloat; 
    farray->count += 1; 
    printArrayContents(farray); 
    return YES; 
} 

int printArrayContents(floatArray* farray) 
{ 
    printf("Printing array contents\n"); 
    for(int j=0; j < farray->count; j++) 
     printf("%f\n", farray->array[j]); 


    return 0; 
} 

에서 호출 : 여기

NSDictionary* review = [self.reviews objectAtIndex:indexPath.row]; 
    returnHeight = [ReviewCell cellHeightForReview:review]; 
    NSLog(@"Adding height to array: %0.0f", returnHeight); 
    AddFloatToArray(heights, returnHeight); 

가 기록됩니다 내용은 다음과 같습니다

2012-09-28 11:46:12.787 iOS-app[1605:c07] -[ProductDetailViewController tableView:heightForRowAtIndexPath:] [Line 598] Adding height to array: 101 
Adding float to array 0.000000 
Printing array contents 
0.000000 
2012-09-28 11:46:12.788 iOS-app[1605:c07] -[ProductDetailViewController tableView:heightForRowAtIndexPath:] [Line 598] Adding height to array: 138 
Adding float to array 0.000000 
Printing array contents 
0.000000 
0.000000 
2012-09-28 11:46:12.788 iOS-app[1605:c07] -[ProductDetailViewController tableView:heightForRowAtIndexPath:] [Line 598] Adding height to array: 122 
Adding float to array 0.000000 
Printing array contents 
0.000000 
0.000000 
0.000000 
2012-09-28 11:46:12.789 iOS-app[1605:c07] -[ProductDetailViewController tableView:heightForRowAtIndexPath:] [Line 598] Adding height to array: 139 
Adding float to array 0.000000 
Printing array contents 
0.000000 
0.000000 
0.000000 

내가 올바른 값이 실제로 플로트에 삽입되어 있는지 확인 수있는 방법 []?

+0

정확히 게시 한 코드를 시도하고'CGFloat returnHeight = 120.f; AddFloatToArray (height, returnHeight);와 내 Xcode의 매력처럼 작동합니다. 여기에서 c/p 할 때 코드에서 아무 것도 제거하지 않았습니까? – AliSoftware

+0

모든 것이 있습니다. 아마도 C 함수가 다른 파일에 있다고 언급 할 가치가 있습니다. – MishieMoo

답변

2

.h의 함수를 선언하지 않았습니다. # importing했습니다. 모든 것이 컴파일되어 실행되었지만 클래스가 제대로 통신하지 못했습니다. 경고 또는 오류가 발생할 것이라고 생각할 수 있습니다.

+2

"C99에서 함수 xxx의 암시 적 선언이 유효하지 않습니다"라는 경고가 트리거되어야합니다. '-Wimplicit-function-declaration' 플래그가 켜져 있는지 확인하십시오. – AliSoftware

+0

전원이 켜지지 않았지만 이전에 그 경고를 본 기억이 있습니다. Google은이 해결책을 제시하지 못했습니다. 감사! – MishieMoo

+2

또한 때때로 "xxx undefined .extern returns int"라고 경고하는 것을 보았습니다. 함수 서명을 알지 못 했으므로 헤더를 가져 오지 않았기 때문에 컴파일러는 함수 대신에 int를 반환한다고 가정합니다. 'float', 그리고 함수 호출 중에 스태킹되는 매개 변수가 그 때문에 엉망이됩니다). 그러나 나는이 경고를 재생산하거나 그와 같은 경우에 도움이되었을 상응하는'-W' 플래그를 찾을 수 없다. – AliSoftware

관련 문제