2013-01-03 2 views
0

사용자가 내 응용 프로그램을 처음 실행할 때 도움말 오버레이를 표시하려고합니다.응용 프로그램의 첫 번째 실행을 감지하려면

이렇게하려면, 내가 didFinishLaunching에 다음 코드를 사용하고 있습니다 : 뷰 컨트롤러에서

if(![[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"IPHONEFIRSTRUN"]) 
    [[NSUserDefaults standardUserDefaults]setBool:TRUE forKey:@"IPHONEFIRSTRUN"]; 

을, 내가 가진 :

if ([[NSUserDefaults standardUserDefaults]boolForKey:@"IPHONEFIRSTRUN"]==TRUE) { 
    [self HelpOverlayIphone]; 
    [[NSUserDefaults standardUserDefaults]setBool:FALSE forKey:@"IPHONEFIRSTRUN"]; 
} 

그러나, 두 번째 사용에 오버레이를 보여줍니다 게다가. 이 문제를 어떻게 해결할 수 있습니까? 어떤 도움을 주셔서 감사합니다.

+0

첫 번째 예에서는 IPADFIRSTRUN이고 두 번째 예에서는 IPHONEFIRSTRUN입니다. 이것은 의도적입니까? –

+0

내가 조사 할 다른 것은 (당신이보고있는 문제를 해결하지는 않지만) boolForKey가 이미 bool을 리턴한다는 것이므로 bool을 검사하여 사실인지 여부를 확인하는 것입니다. –

+0

입력 오류로 인해 미안합니다. 처음에는 @ IPHONEFIRSTRUN입니다. 그러나 작동하지 않습니다. – Madhu

답변

4

논리가 지나치게 복잡합니다. 사용자 기본값을 영구히 설정하면 한 번 일이 발생했음을 나타냅니다.

if (! [[NSUserDefaults standardUserDefaults]boolForKey:@"IPHONEFIRSTRUNCOMPLETE"]) { 
     [self HelpOverlayIphone]; 
     [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"IPHONEFIRSTRUNCOMPLETE"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

앱 위임의 모든 코드를 가지고 : 값이 설정되지 않은 경우 그것은 당신의 행동을하고 코드가 다시 실행되지 않도록 변수를 설정하는 경우 대신, 뷰 컨트롤러에, 참조하십시오.

또한 Xcode에서 앱을 중지하기 때문에 원래 코드가 작동하지 않는 것 같습니다. synchronize을 사용하지 않으면 사용자의 기본 변경 사항이 저장되지 않습니다 (앱을 종료하면 결국 변경 사항이 영구 저장됩니다).

+0

그건 분명히 문제가 될 것입니다. – citruspi

+1

왜 이렇게 downvoted .. –

+0

@ MisVar : 아마 원래의 대답은 포스터가 잘못되었다는 잘못된 철자를 지적했기 때문일 수 있습니다. 내 새로운 대답은 폭력 투하자를 만족시켜야한다. –

0

프로그램 시작시 사용하는 기본값을 등록 했습니까? 나는 먼저가 존재하지 않는 경우에만 키를 설정 할

- (void)registerDefaults:(NSDictionary *)dictionary 

에 전화를 걸 필요가 NSUserDefaults here

에 대한 사과 문서를 다시 읽는 건의 할 것입니다. 그런 다음 첫 번째 실행에서 키가 거짓인지 확인하고이 시점에서 설정하십시오.

사전이 실제로 영구적 인 방식으로 저장되지 않으므로 내 생각에 코드가 작동하지 않는 것입니다.

0

나는 앱이 작동 할 때 발생하는이 기능을 항상 신뢰할 수 있습니다. 나는 다른 애플 리케이션과 충돌하지 않도록 그냥 임의의 해시입니다 uniqueNameOfApp있다.

-(void)loadSettings { 
NSMutableDictionary *sttngs = [[NSUserDefaults standardUserDefaults] 
objectForKey:uniqueNameOfApp]; 

    if(sttngs != nil) { 
    [userSettings addEntriesFromDictionary:sttngs]; 
    } else { 
    _appFiredForFirstTime = YES; 
    } 
} 
+0

저장 한 사용자 기본값은 다른 앱에서 볼 수 없으므로 충돌에 대한 걱정은 없습니다 ... –

관련 문제