2016-10-18 4 views
0

Firebase RemoteConfig에서 정보를 가져 오는 데 문제가 있습니다. 앱 설치시 MainController보기 컨트롤러 앞에 언어 선택 화면이 있습니다. MainController View 컨트롤러에서 RemoteConfig 반입을 수행하고 있습니다. MainController보기 컨트롤러 앞에 언어 선택 화면이 표시되면서 처음으로 작동합니다. 다음과 같은 예외로Firebase 원격 설정 충돌 (목표 OS)

[self.remoteConfig fetchWithExpirationDuration:expirationDuration completionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) { 

:하지만, 다음 번부터,이 특정 라인에 충돌

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString firstObject]: unrecognized selector sent to instance 0xa0000000000616a2' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010d20134b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x000000010cc6221e objc_exception_throw + 48 
    2 CoreFoundation      0x000000010d270f34 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 
    3 CoreFoundation      0x000000010d186c15 ___forwarding___ + 1013 
    4 CoreFoundation      0x000000010d186798 _CF_forwarding_prep_0 + 120 
    5 English        0x0000000107f44e1b -[GIPLocale googleLanguageWithAppleLanguages:] + 33 
    6 English        0x0000000107f45396 -[GIPLocale recalculateLocale] + 54 
    7 English        0x0000000107f44c26 -[GIPLocale initWithLanguageMappings:] + 99 
    8 English        0x0000000107f44b77 __25+[GIPLocale googleLocale]_block_invoke + 41 
    9 libdispatch.dylib     0x000000010da900cd _dispatch_client_callout + 8 
    10 libdispatch.dylib     0x000000010da751fc dispatch_once_f + 501 
    11 English        0x0000000107f44b4c +[GIPLocale googleLocale] + 42 
    12 English        0x0000000107f42d06 +[RCNDevice deviceLocale] + 31 
    13 English        0x0000000107f43344 +[RCNDevice hasDeviceContextChanged:projectIdentifier:] + 325 
    14 English        0x0000000107f3e133 -[RCNConfigFetch fetchAllConfigsWithExpirationDuration:completionHandler:] + 150 
    15 English        0x0000000107f3577f -[FIRRemoteConfig fetchWithExpirationDuration:completionHandler:] + 77 

업데이트 : 언어 선택 화면을 표시하는 경우 그것은 중요하지 않습니다 또는 아니. 그것은 항상 새로운 설치에서 작동하고 다음 실행에서 작동을 멈 춥니 다.

이것은 내가 사용하는 전체 코드입니다.

-(void)viewDidAppear:(BOOL)animated{ 
    //Display select language settings 
    if (![[NSUserDefaults standardUserDefaults] boolForKey:DISPLAY_LANGUAGE_SETTING]) 
    { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setBool:TRUE forKey:DISPLAY_LANGUAGE_SETTING]; 
     [defaults synchronize]; 
     //Display Language Screen 
     AGSelectLanguageViewController *languageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"AGSelectLanguageViewController"]; 
     self.modalPresentationStyle = UIModalPresentationFullScreen; 
     [self presentViewController:languageViewController animated:NO completion:nil]; 
    } 

    [self configFireBase]; 

} 
    -(void)configFireBase{ 
     // Firebase Configuration 
     self.remoteConfig = [FIRRemoteConfig remoteConfig]; 
     //Enabling development mode 
     FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] initWithDeveloperModeEnabled:YES]; 
     self.remoteConfig.configSettings = remoteConfigSettings; 

     //Set default Remote Config values 
     [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"]; 

     [self fetchConfig]; 
    } 

- (void)fetchConfig { 
    _discount_percentage = self.remoteConfig[DISCOUNT_PERCENTAGE].numberValue.floatValue; 

    long expirationDuration = 3600; 

    if (self.remoteConfig.configSettings.isDeveloperModeEnabled) { 
     expirationDuration = 0; 
    } 


    [self.remoteConfig fetchWithExpirationDuration:expirationDuration completionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) { 
     if (status == FIRRemoteConfigFetchStatusSuccess) { 
      NSLog(@"Config fetched!"); 
      [self.remoteConfig activateFetched]; 
     } else { 
      NSLog(@"Config not fetched"); 
      NSLog(@"Error %@", error.localizedDescription); 
     } 
    }]; 
} 

내가 잘못 들었습니까? 도와주세요.

답변

2

GIPLocale 클래스는 로케일에 대한 구글과 애플 이름 사이에 매핑을 실시하고,이 NSUserDefaults에서 애플리케이션의 로케일을 끌어 것을의 일환으로 :

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; 

을 나는 기본적으로 항목이 설정지고 어딘가에 있다고 추측하고있다 배열이 아닌 문자열 또는 유사 - 앱에서 해당 문자열을 참조하는지 확인하십시오.

+0

고마워요 :) AppleLanguages에서이 값을 삽입했습니다. - [기본값 : setObject : [localeList objectForKey : languageChoosen] forKey : @ "AppleLanguages"]; 그것은 모든 문제를 일으켰다. – Pria