我正在使用自定义键盘扩展程序。几乎已经完成,但我只是面对设备的问题,当我与扩展和我的主机应用程序沟通数据,而不是在设备中工作,但同样的事情在模拟器中工作。我的代码如下:
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中设置 RequestsOpenAccess ,并在设置 - >键盘 - customkeyboar->完全访问权限
我的扩展名单:
答案 0 :(得分:1)
我获得了解决方案,我创建了新的临时配置文件,并启用了应用程序组,并从app group
Xcode
项目设置target-->capability--Expand App Group
并点击< strong> + 添加应用程序组,如下面的屏幕截图:
为我的键盘扩展目标做同样的事情。然后我在NSuserDefault
中使用了此设置应用组标识符:
_defaultvalue = [[NSUserDefaults alloc] initWithSuiteName:@"group.keyboaredExtention"];
[_defaultvalue setBool:NO forKey:@"Layout"];
[_defaultvalue synchronize];
现在我的设备和模拟器工作正常。希望对别人有所帮助。
答案 1 :(得分:0)
在iOS8中,自定义键盘和包含应用可以使用共享容器进行通信。
这是通过要求用户允许完全访问来实现的,这是iOS设置应用程序中的一般设置 - >键盘 - >键盘 - >完全访问(开/关)。
您应该将此设置添加到键盘的Info.plist:
RequestsOpenAccess
有关详细信息,请阅读Apple的iOS8自定义键盘API文档: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html#//apple_ref/doc/uid/TP40014214-CH16-SW11