2015-01-03 3 views
0

이 코드가 있습니다CGFloat 분할 충돌

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    CGFloat screenWidth = screenRect.size.width; 
    NSLog([NSString stringWithFormat:@"\n%g pixel \n=======================================",screenWidth]); 
    CGFloat imageWidth = [[self.widthArray objectAtIndex:indexPath.row] floatValue]; 
    NSLog([NSString stringWithFormat:@"\n%f pixel\n=======================================",imageWidth]); 
    CGFloat ratio = screenWidth/imageWidth; 
    NSLog([NSString stringWithFormat:@"\nratio is %f\n=======================================",ratio]); 

screenWidthimageWidth가 완벽하게 정상적으로입니다,하지만 난 ratio를 기록 할 때 프로그램은 충돌 및 로그 (lldb)을 말한다. 아직 솔루션을 찾지 못했습니다. 모든 Sugestions?

편집 :

처음 두 로그

2015-01-03 08:49:00.888 Huckleberry[6554:158359] 
320.000000 pixel 
======================================= 
2015-01-03 08:49:00.889 Huckleberry[6554:158359] 
512.000000 pixel 
======================================= 

이며, 가장 가능성이 히트 한 콘솔에서 (lldb)가 표시되면 다음 ratio 그냥 (lldb)

+0

1. 값은 무엇입니까? 2. NSLog()를 연구하면'stringWithFormat'을 사용할 필요가 없습니다. 예 :'NSLog (@ "\ n % g 픽셀 \ n ================================ === ", screenWidth);' – zaph

+2

NSLog()를 연구하면 stringWithFormat을 사용할 필요가 없습니다. 예 :'NSLog (@ "\ n % g 픽셀 \ n ================================ === ", screenWidth);'. 더 나아가'NSLog()'의 형식 문자열은 리터럴이어야하며, Xcode는 이것에 대해서도 경고합니다. – zaph

+1

32 비트 플랫폼의 경우 'CGFLoat'은'float '로 정의되고, 64 비트 플랫폼의 경우'CGFLoat'는 'double'으로 정의됩니다. – zaph

답변

-1
CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width; 
NSLog(@"Screen width = %f pixel", (float) screenWidth); 
CGFloat imageWidth = [[self.widthArray objectAtIndex:indexPath.row] floatValue]; 
NSLog(@"Image width = %f pixel", (float) imageWidth]); 
CGFloat ratio = screenWidth/imageWidth; 
NSLog(@"ratio is %f", (float) ratio]); 
+2

이 질문에 대한 답변이 아닙니다. 좋은 코드 정리이지만 아무 것도 설명하지 못하거나 문제의 문제를 해결하지 못합니다. – rmaddy

+0

@rmaddy - 형식 문자열에서 피연산자 길이 문제를 수정합니다. –

+0

그러나 피연산자 길이 문제는 없습니다. '% f'는'float'과'double'과 함께 사용할 수 있습니다. – rmaddy

1

입니다 중단 점. 거기에 브레이크 포인트를 추가하지 않았다면 예외 중단 점이 생겨서 잡히지 않은 모든 예외를 잡을 수 있습니다.

콘솔 위의 "재생"모양의 버튼을 클릭하십시오. 실행을 계속해야합니다 (적어도 충돌이 발생한 경우 도움이됩니다).

관련 문제