2012-10-12 2 views
-1

다음과 같은 방법으로 연습중인 사람을 확인하려고합니다. C#에서이 작업을 수행하는 올바른 방법처럼 보였지만 여기서 몇 가지 경고/오류가 발생합니다. 내가 확인 설정 한 줄에 iPhone 앱에서 BOOL 사용 시도 및 실패

- (BOOL) isAvailablePractice:(NSString*)practiceId 
{ 
    BOOL *check = NO; 

    for(NSUInteger i = 0; i < [self.practices count]; i++) 
    { 
     EHRXOption *o = [self.practices objectAtIndex:i]; 
     if([o.id isEqualToString:practiceId]) 
      check = YES; 
    } 

    return check; 
} 

는 = YES 나는이 오류

Incompatible pointer to integer conversion returning 'BOOL *' (aka 'signed char *') from a function with result type 'BOOL' (aka 'signed char'); dereference with * 

나는이 오류를 이해하는 방법을 얻을 반환 확인에 다음과 같은 경고

Incompatible integer to pointer conversion assigning to 'BOOL *' (aka 'signed char *') from 'signed char'; 

을 얻고, I 잘못 될 수 있습니다. * return * 앞에 *를 붙이면 실제로 작업 한 값이 아닌 새로운 값이 반환됩니다.

Objective C가 BOOL 값을 사용하는 방법을 실제로 이해하지 못합니다.

+1

더욱 악화됩니다. 당신은 C가 어떻게 작동하는지 이해하지 못하고 있습니다. 가장 좋은 최고 아이폰 앱을 만들기 전에 C를 마스터하는 것이 좋습니다. * –

+0

Sidenote 2 : 휴식을 제거하고 for 루프에서 YES를 간단히 다시 돌려줌으로써이 루프를 최적화 할 수 있습니다. 코드는 현재 프로세서 시간을 낭비합니다. –

+0

다른 어리석은 질문을 할 수있게 해주면, 루프에서 YES를 리턴하면, 그것도 빠져 나오거나 휴식을 취해야합니까? – Jhorra

답변

6

BOOL * check = NO;

은 NO =

BOOL 체크 잘못된 변경을이고;

+0

글쎄요. 속성은 메서드의 범위 밖에서 사용되지 않으므로? 나는 전에 이런 것들을 보았지만 왜 결코 결코 이해하지 못했습니다. – Jhorra

+1

BOOL은 여전히 ​​프리미티브이기 때문에 해당 없음. 소스를 보면 bool의 typedef입니다. simples! –

+0

자바 또는 C# 또는 루비 또는 기본적으로 대부분의 언어와 같은 세계에서 오는 C는 반복적으로 당신을 여행 할 것입니다. 포인터를 연구해야합니다. 즉, C는 기본적으로 어셈블러를 작성하는 편리한 방법입니다. –

4

포인터를 사용하지 마십시오.

그냥 BOOL check = NO;

1

당신은 BOOL check보다는 BOOL *check합니다. 첫 번째 값은 BOOL 값입니다. 후자는 BOOL에 대한 포인터입니다. 거기에있는 코드에서 BOOL 주소를 다루지 않으므로 포인터가 올바른 유형이 아닙니다.

관련 문제