我需要在iOS自定义键盘中将数据保存到NSUserDefault
。
我已在开发人员门户网站XCode
中成功创建了应用组和权利。
以下是我如何通过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 :(得分:4)
在应用程序组的所有应用程序中初始化NSUserDefaults
这样的对象,他们将共享数据库:
[[NSUserDefaults alloc] initWithSuiteName:@"group identifier"];
请记住,每个应用程序的[NSUserDefaults standardUserDefaults]
数据库中的所有内容都不会转移到此数据库中。
[NSUserDefaults standardUserDefaults]
[yourDefaults synchronize];
应该像上面的代码一样返回共享数据库,但事实并非如此。我把它作为一个错误提交(rdar:// 17164758)。
不要忘记同步数据库:
{{1}}
答案 1 :(得分:2)
好的,所以我看看周围因为我遇到了确切的问题。我所做的工作是将主应用程序和扩展程序添加到组中,转到主项目 - >目标 - >功能并创建一个组(如果您没有,或者无论如何都要创建一个组)像这样:
然后,转到目标(E)下面的扩展,再转到功能并将扩展添加到组(与主目标完全相同的应用组),如下所示:
然后,在主应用程序中完成两者后,无论何时想要添加内容,都要创建一个新的NSUserDefaults实例,但是Suitename等于您之前创建的组名。像这样:
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.
在您的扩展程序的ViewController中,使用相同的组名,但要读取用户默认值:
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类添加对象更改时的通知功能,但我无法找到它的链接。我确定如果你去谷歌虫洞课,你会遇到它。
我希望我能提供帮助,如果您发现了更多信息,请与我分享。
答案 2 :(得分:0)
您可以从包含的应用加载正确的数据,因此在扩展应用中设置新值可能会有所帮助。
[self.defaults setObject:newValue forKey:@"thisKeyIsJustUsedForSyn"]
然后加载正确的数据。