【问题标题】:Storing data in custom keyboard在自定义键盘中存储数据
【发布时间】:2014-08-16 18:02:54
【问题描述】:
我正在构建一个自定义键盘,它可以学习您键入的方式以实现更智能的自动更正。为了学习...
我需要能够将数据存储到用户设备。我已经尝试将NSFileManager 与NSDocumentsDirectory 一起使用,但在AppExtension 中没有保存任何内容。 (我在常规应用程序(非应用程序扩展)中测试了代码(复制粘贴)并且它有效)。我什至在 .plist 中启用了“请求开放访问”并重新安装了键盘……仍然无法保存数据。
有没有办法在应用扩展中存储数据?
我考虑过的可能解决方案:
•可能在用户通讯录中创建一个包含我的信息的联系人(如果允许应用程序扩展这样做),但用户可能会怀疑我的应用程序为何请求修改其联系人地址的权限书)。
•显示一个隐藏的 UIWebView,它使用 javascript 注入来存储和读取数据Safari Javascript Database,但我担心如果缓存被清除,这些数据可能会被删除。
【问题讨论】:
标签:
objective-c
save
ios8
ios-app-extension
custom-keyboard
【解决方案1】:
编辑:现在这不再适用于 iDevice beta 5(启用或禁用 requestOpenAccess)?但它仍然适用于 SIMULATOR beta 5?嗯
__ 原帖如下:_
事实证明 NSUserDefaults 确实保存数据,它只是在 BETA 3 模拟器上不起作用,但在 BETA 5 iDevice 上起作用。 RequestsOpenAccess 不需要启用!
NSUserDefaults *defaults = [[NSUserDefaults alloc]initWithSuiteName:@"com.company.keyboard.uniqueCodeHere"];//uniqueCodeHere can be anything... we just have to make sure the SuiteName isn't equal to your info.plist bundle ID so we add a random uniqueCode to the end of this ID.
[defaults setObject:@"myStringData" forKey:@"savedStrings"];
[defaults synchronize];
*注意,SuiteName 不能等于 info.plist 中的包 ID,否则由于某种原因它不起作用...