我正在使用自定义键盘扩展名。差不多完成了,但是当我与扩展程序和主机应用程序通信数据时,我只是面临设备问题,这在设备中无法正常运行,但在模拟器中也能正常工作。我的代码如下:
HostApp View控制器:
- (void)viewDidLoad {
_defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];
[_defaultvalue setBool:YES forKey:@"Layout"];
[_defaultvalue synchronize];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)RightAction:(id)sender {
_defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];
[_defaultvalue setBool:YES forKey:@"Layout"];
[_defaultvalue synchronize];
}
- (IBAction)leftAction:(id)sender {
_defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];
[_defaultvalue setBool:NO forKey:@"Layout"];
[_defaultvalue synchronize];
}
然后我BOOL
使用以下代码在扩展目标中检查此值,并根据需要更改keyBoard布局:
-(void)LoadKeyboardview
{
_defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.myapp.myappname.targetKeyboard"];
if([_defaultvalue boolForKey:@"Layout"])
{
self.ObjKeyLayout=[[[NSBundle mainBundle]loadNibNamed:@"keyboardLayout" owner:nil options:nil]objectAtIndex:0];
[self addGesturToKeyBoard];
self.inputView =self.ObjKeyLayout;
}
else{
self.ObjKeyLayout=[[[NSBundle mainBundle]loadNibNamed:@"leftLayout" owner:nil options:nil]objectAtIndex:0];
[self addGesturToKeyBoard];
self.inputView =self.ObjKeyLayout;
}
}
相同的代码在模拟器ios8设备iPhone5中运行良好。请在苹果文档中读到说NSUserDefaults
initWithSuiteName可以帮助我解决这个问题的代码,谢谢您。
更新:
我已经在plist中以及在setting-> keyboard-customkeyboar-> Full Access ON中设置了RequestsOpenAccess
我的扩展Plist:
我得到的解决方案是我创建新的临时配置文件,并通过点击+添加应用程序组,从我的项目中启用应用程序组和设置app group
,如以下屏幕截图所示:Xcode
target-->capability--Expand App Group
为我的键盘扩展目标做同样的事情。然后,我在以下位置使用了此设置应用程序组标识符NSuserDefault
:
_defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.keyboaredExtention"];
[_defaultvalue setBool:NO forKey:@"Layout"];
[_defaultvalue synchronize];
现在,在我的设备和模拟器中都能正常工作。希望对别人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句