2012-05-13 4 views
2

저는 Xcode 및 iPhone 개발에있어 처음입니다. 나는 appDelegate.m 파일에 함수 getISlogged;을 작성했다. 나는 항상 Thread 1: breakpoint 2.1를 얻을 그것을 실행할 때 이제- (bool)을 반환하지 않습니다.

SWGAppDelegate *appDelegate = (SWGAppDelegate *)[[UIApplication sharedApplication]delegate]; 
NSString *islog = @"no"; 
if(appDelegate.getISlogged){ 
    [email protected]"yes"; 
} 

와 내가 함께해야합니까 무슨 생각이 없다 :

- (BOOL) getISlogged { 
    NSUserDefaults *usenow = [NSUserDefaults standardUserDefaults]; 
    NSNumber *islog = nil; 
    if(usenow){ 
     islog = [usenow objectForKey:@"is_log"]; // should equal 1 or 0... 
    } 

    UIAlertView * alert1 = [[UIAlertView alloc] initWithTitle:@"works" message:@"test1" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles: nil]; 
    [alert1 show]; 
    if (islog == [NSNumber numberWithInt:(1)]) { 
     return YES; 
    } else { 
     return NO; 
    } 
} 

가 좋아, 지금은 그렇게처럼 내 viewController.m에서 호출 : 그것은 이런 식입니다 그. 나는 모든 코드를 제거하고 함수에 단지 return YES;을 남기려고했지만 여전히 동일한 오류가 발생합니다. \

도움이나 조언이 도움이 될 것입니다.

+0

당신은 확인 실수로 중단 점을 추가하지 않았습니까? :) –

답변

9

가 아니라 단지 예를 들어, 그 정수 값을 추출하는 1과 비교 한 것을 기반으로 YES 또는 NO 복귀보다는 boolValueNSNumber 인스턴스 반환 키는 사용자의 기본 설정에 존재하지 않는

- (BOOL) getISlogged { 
    return [[[NSUserDefaults standardUserDefaults] objectForKey:@"is_log"] boolValue]; 
} 

경우,이 메소드의 결과가 NO 될 것입니다 : 전체 방법은 감소 될 수있다.

또 다른 “ 코드 냄새 ”은 (@"yes"@"no"islog에 할당되는으로) 당신은 문자열로 부울 값을 할당하는 것입니다. 문자열을 어딘가에 쓸 계획이라면 아무 문제가 없습니다. 이 변수를 사용하여 로그에 기록할지 여부를 결정할 계획이라면 대신 BOOL으로 설정해야합니다. 문자열은 텍스트를 저장하기위한 것입니다.

마지막으로 Objective-C에서 == 연산자는 개체 ID (두 참조가 같은 개체를 가리키는 지 확인)가 같음을 나타내며 개체 평등을 비교하지 않습니다. NSNumber 또는 “에 대해 isEqual: 내장 메서드를 사용하여 ” 상자 값을 추출하고 다른 unboxed 값과 비교할 수 있습니다. 하나이 트릭을 할 것입니다의 : 오히려 재산보다 방법으로

if ([islog isEqualToNumber:[NSNumber numberWithInt:1]]) 
    // do something 

// or 

if ([islog intValue] == 1) 
    // do something 
5
if (islog == [NSNumber numberWithInt:(1)]) 

잘못되었습니다. (값 대신에 주소를 비교합니다).

사용 : 대신

if ([islog intValue] == 1) 

.

+1

어쨌든 그들은 같은 대상을 가리킬 것입니다. 많은 'NSNumber'값이 캐싱됩니다. – dreamlax

+0

@dreamlax : 그러나 여러분이 알고있는 것은 이것이 "의존해서는 안되는 고전적인"구현 세부 사항입니다. –

+0

@dreamlax 핵심 단어를 접할 기회가 –

0

전화를 :

if([appDelegate getISlogged]){ 

을 (또는 애플 대리자에서 속성으로 선언합니다.)

관련 문제