2014-06-16 2 views
5

iOS 사용자 지정 키보드의 데이터를 NSUserDefault에 저장해야합니다. 개발자 포털 및에서 앱 그룹 및 자격을 성공적으로 만들었습니다. 여기NSUserDefault는 iOS8의 내선에서 저장 및로드 할 수 없습니다.

내가 UISwitch

- (IBAction)switchAction:(id)sender 
{ 
    [self.defaults setBool:self.myKey.on forKey:@"myValue"]; 

    [self.defaults synchronize]; 
} 

내 값을 저장하는 방법이며, 여기에 내가 KeyboardView에서 값을로드하는 방법입니다.

self.defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.customkeyboard"]; 

if([self.defaults boolForKey:@"myValue"]) 
{ 
    self.backgroundColor = [UIColor redColor]; 
} 

else 
{ 
    self.backgroundColor = [UIColor blackColor]; 
} 

값이로드되지 않습니다.

어떻게 데이터를 저장하고로드 할 수 있습니까?

+0

가능한 [App 그룹과 앱 간 데이터 통신 및 유지] 중복 가능 (0120-388-301) –

+0

아니요 나는 이미 그 질문을 발견했다. 내 질문에 NSUserDefault에서 데이터를로드하는 방법을 모르겠습니다. –

+0

나는 [그 질문에 대한 내 대답] (http://stackoverflow.com/a/24063144/2446155)을 언급하고 있었는데, 나는 약간 수정하고 아래에 복제했다. –

답변

4

앱 그룹의 모든 응용 프로그램에서이처럼 NSUserDefaults 객체를 초기화하고 데이터베이스를 공유 :

[[NSUserDefaults alloc] initWithSuiteName:@"group identifier"]; 

이 데이터베이스로 이월되지 않습니다 각 응용 프로그램에 대한 [NSUserDefaults standardUserDefaults] 데이터베이스에서 마음을 다하십시오.

documentation indicates[NSUserDefaults standardUserDefaults]은 위 코드와 마찬가지로 공유 데이터베이스를 반환해야하지만 그렇지 않습니다. 내가 버그 (rdar : // 17164758)로 제출했다.

그리고 데이터베이스를 동기화하는 것을 잊지 마세요 :

[yourDefaults synchronize]; 
+0

예, 당신이 말했듯이 제대로로드되지 않습니다. 여기 내 코드. self.defaults = [[NSUserDefaults alloc] initWithSuiteName : @ ""]; if ([self.defaults boolForKey : @ "myValue"]) { self.backgroundColor = [UIColor redColor]; } else { self.backgroundColor = [UIColor blackColor]; } –

+0

@Sabo 데이터베이스가 비어있는 상태에서 시작하기 때문에 값을 설정하기 전에'switchAction :'메소드를 호출해야합니다. 또한 인 타이틀먼트 파일, 개발자 포털 앱 ID, 프로비저닝 프로필 및 Xcode에서 앱 그룹이 올바르게 설정되어 있는지 확인하십시오. –

+0

내 SwitchAction은 UISwitch와의 연결 이벤트입니다. UISwitch가 켜지면 값을 NSUserDefault에 저장합니다. 그러나 KeyboardView 해당 데이터를로드 할 수 없습니다. : –

0

당신은 어쩌면 도움이 될 것입니다 확장 응용 프로그램에 새 값을 설정, 포함하는 응용 프로그램에서 올바른 데이터를로드 할 수 있습니다.

[self.defaults setObject:newValue forKey:@"thisKeyIsJustUsedForSyn"] 

그런 다음 올바른 데이터를로드하십시오.

2

좋아요, 그래서 정확한 문제가 있었기 때문에 주위를 둘러 보았습니다. 내가 한 일은 메인 앱과 확장을 그룹에 추가하고 메인 프로젝트 -> 타겟 -> 기능으로 이동하여 그룹을 만들거나 (그룹이 없다면 만들거나 어쨌든 만들 수 있습니다)

enter image description here

그런 기능에 다시 대상 (E) 아래의 확장으로 이동하여 다음과 같이 그룹 (정확히 같은 응용 프로그램 그룹이 주요 대상에 대해했던 것처럼)에 확장자를 추가 :

enter image description here

그런 다음 완료 일단 모두, 당신이 뭔가를 추가 할 때마다 기본 앱에서 NSUserDefaults의 새 인스턴스를 만들되 이전에 만든 그룹 이름과 같은 이름으로 만듭니다. 이 같은 확장의의 ViewController에서

NSArray *testing = @[@"first",@"Second",@"Third"]; 
NSUserDefaults *userd = [[NSUserDefaults alloc]initWithSuiteName:@"The gouprname I made earlier"];//This is exactly the same as the groupname 
[userd setObject:testing forKey:@"ExtensionArray"];//set the object you want to share 
[userd synchronize]; //It's a good idea to sync, just to be on the safe side. 

이 같은 그룹 이름을 사용하지만 사용자 기본값을 읽어 :

NSUserDefaults *sharedD=[[NSUserDefaults alloc]initWithSuiteName:@"Exactly the same groupname that I gave both in the Capabilities and when initialising the userdefault"]; 
self.testing = [[NSArray alloc]initWithArray:[sharedD arrayForKey:@"ExtensionArray"]]; 

그리고 짜잔! 배열은 거기에있다! 웜홀 (Wormhole) 클래스를 사용하여 개체가 변경 될 때 알림 기능을 추가 할 수도 있지만 링크를 찾을 수없는 경우가 있습니다. 나는 당신이 웜홀 (Wormhole) 클래스를 위해 구글이라면, 당신은 그것을 발견 할 수있을 것이다.

더 도움이 되었기를 바랍니다. 정보를 더 찾았 으면 나와 공유하십시오.