2013-10-02 3 views
0

UITextView에서 사용하는 색상을 얻으려고합니다. 내가 쓴이 들어 UIColor 비교에서 원하는 결과를 얻지 못했습니다.

,

myTextView.textColor 

그러나 이것은 나에게

UIDeviceRGBColorSpace 0.439216 0.439216 0.439216 1 

실제 RGB 조합을 얻는 방법을 어떤 생각으로 출력을 제공?

내가 볼

... 내가 255를 곱해야

: D : P

0.439216 * 255 비교 내 색이 결과를 원하는 제공되지 않는 이유 (112)이다

?

UITextView에 적용한 색상은 다음과 같이 상수를 사용합니다. 내가

#define placeColor [UIColor colorWithRed:112/255.0 green:112/255.0 blue:112/255.0 alpha:1.0] 

내가

if (aboutCompany.textColor == placeColor) { 
    NSLog(@"place color.."); 
    aboutCompany.text = @""; 
    aboutCompany.textColor = fottColor; 
} else { 
    NSLog(@"not place color.."); 
} 

으로 비교하고 때를 얻고, 색을 배치하지 ...

어떤 이유 왜?

답변

0

두 개의 NSObject (또는이 경우 NSObject 하위 클래스)를 비교할 때 == 연산자를 사용하지 않으려합니다. == 연산자는 두 개의 객체가 같은 값을 가지고 있는지 알려주지 않고, 과 동일한 객체를 비교하는 경우에만 알려줍니다. 'compare'또는 'isEqual'메소드를 사용해야합니다. (실제로는 각각 세 가지 상태 중 하나를 나타내는 열거 형을 반환하기 때문에 비교에는 약간의 추가 오버 헤드가 있습니다.

'Under the hood'는 객관적인 -C에서는 결코 발생하지 않습니다. NSObject를 직접 선언하면, 포인터를 선언 한 후에 객체가 채워지는 주소 공간으로 채워진다.

{ 
    NSObject *foo=[[Foo alloc] init]; 
    NSObject *bar=foo; 

    foo==bar;//true 
    //If you inspect foo and bar really closely in the debugger, you'll discover they're both just integers pointing to a 'random' memory space. 
} 

{ 
    NSNumber *[email protected](1); 
    NSNumber *[email protected](1); 
    //Again, if you inspect these very closely, you'll discover they're pointers to memory space, but this time you're pointing to two different spaces in memory, even though you're storing the same data in them. 
    alpha==beta;//False, they're two separate objects 
    [alpha isEqualTo:beta];//true; their value is identical 
    [alpha intValue]==[beta intValue;//Again, true because their value is identical 
} 

또한, 부동 소수점 값으로 작업 할 때 나는 평등 연산자의 결과를 신뢰 매우 조심 것 - 그리고 UIColor 년대는 수레에 내장되어 있습니다. 수레는해야 할 때조차 평등하지 못하는 까다로운 습관을 가지고 있습니다. 그것은 수의 기본 기계 표현과 관련이 있습니다. 수는 수치에서 어느 정도의 '잡음'을 가질 수 있습니다. 그 소음은 거의 중요하지 않지만 (예 : +/- 1 * 10^-10), 평등 작업을 원할 때 정말 고통 스럽습니다. 이 기사를 온라인에서 볼 수있는 기사가 많이 있지만 마음 편하게 살펴보고 평등을하는 대신 두 숫자의 차이가 주어진 엡실론보다 작은 지 확인해야합니다 (차이는 10 미만 임).^-5, 예를 들면. 정확한 엡실론을 유도하는 방법은 내가 당신을 도울 수없는 것입니다. 자신의 연구를해야합니다. 나는 도움을 줄 수 없다면 부유물을 결코 사용하지 않음으로써 두통을 피할 수 있으며, 평등을 필요로하는 일은 절대로하지 마십시오.

관련 문제