我正在处理自定义键盘扩展插件。几乎完成了,但在与扩展和我的主机应用程序通信时出现问题。这在模拟器中可以运行,但在设备上无法正常工作。我的代码如下:
主机应用程序视图控制器:
主机应用程序视图控制器:
- (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
值,并根据需要更改键盘布局:
-(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中设置了RequestsOpenAccess,并在设置->键盘-自定义键盘->完全访问中打开了ON。
我的扩展程序Plist: