我需要将数据保存到NSUserDefault我的iOS自定义键盘中.我已经在开发人员门户网站中成功创建了应用程序组和权利XCode.
以下是我如何使用UISwitch保存我的价值
- (IBAction)switchAction:(id)sender
{
[self.defaults setBool:self.myKey.on forKey:@"myValue"];
[self.defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)
这是我如何在KeyboardView中加载值.
self.defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.customkeyboard"];
if([self.defaults boolForKey:@"myValue"])
{
self.backgroundColor = [UIColor redColor];
}
else
{
self.backgroundColor = [UIColor blackColor];
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,也没有加载价值.
我如何保存和加载数据?
在iOS 8中,Apple为开发人员提供了创建自定义键盘的能力.在文档中,Apple声明如果要支持iOS当前不支持的语言,则应创建新键盘.因此,如果您能够支持新语言,是否可以创建包含新表情符号字符的键盘?我认为Apple说你可以支持一种新语言,他们会期望有自定义字符.如果可以包含自定义字符,其他设备(即使只有其他运行iOS 8的设备)如何显示新字符?
所以我一直在研究这个自定义键盘一段时间,在 iOS 8 Beta 3 之前一切都很好。
我为 iPhone Portrait、iPhone Landscape、iPad Portrair、iPad Landscape 和 iPhone 4 Portrait 创建了 5 个 xib,问题就在这里。
在我的 KeyboardViewController:UIInputViewController 中,它是在我基于模板创建自定义键盘时创建的。
我有这个私有方法来确定我应该加载哪个 xib,基本上我只是检查屏幕宽度,然后删除所有子视图并添加新的键盘视图。
- (void)viewWillLayoutSubviews
{
NSLog(@"[DEBUG] viewWillLayoutSubviews");
[super viewWillLayoutSubviews];
[self determineKeyboardNib:self.view.frame.size];
}
//
//- (void)viewDidLayoutSubviews
//{
// NSLog(@"[DEBUG] viewDidLayoutSubviews");
// [super viewDidLayoutSubviews];
// [self determineKeyboardNib:self.view.frame.size];
//}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
NSLog(@"[DEBUG] viewWillTransitionToSize:withTransitionCoordinator:");
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[self determineKeyboardNib:size];
}
/*
* Determine which xib file to load based on the width of the screen
*/
- (void) determineKeyboardNib: …Run Code Online (Sandbox Code Playgroud) 我正在创建一个自定义iOS 8键盘作为宠物项目.
我正在尝试尽可能准确地复制系统键盘,但是从头开始构建它.
我基本上已经完成了这件事.我遇到的最后一个障碍是在键盘上添加自动更正功能.有没有办法让自动更正的行为与常规系统键盘上的相同?
该UILexicon文档是很稀疏.
编辑:
在这方面取得一些进展.UILexicon的requestSupplementaryLexiconWithCompletion:方法似乎只是从我的设备的联系人和键盘快捷方式返回结果.然后我继续看看如何自动更正 NSString并找到UITextChecker类,它已经从iOS 3.2开始提供.
使用这种方法,我可以对单个单词实现自动更正建议,但我仍在研究添加上下文感知自动更正的能力(例如,将"北极猴"更正为"北极猴").
我正在使用iOS8的今日小部件来显示与当天相关的信息.问题是如果没有要显示的相关消息,我根本不想显示小部件/部分.
我知道它必须是可能的,因为BA应用程序会这样做(它只在有航班时显示小部件,其余时间根本不可见).我只是想办法实现这种行为.
有谁知道如何做到这一点?
objective-c ios-app-extension ios8-extension ios8-today-widget
在尝试在iOS 8键盘扩展中使用SpriteKit时,我遇到了许多崩溃,这些崩溃只发生在使用物理设备而未连接到调试器时.
如果调试器连接到设备,或者如果在SIM卡中运行,一切都很可爱.
当没有连接调试器时,我相信扩展的生命周期略有不同,有时候键盘扩展会背景化,导致OpenGL崩溃.
苹果技术说明中描述了我们遇到的崩溃.它位于函数gpus_ReturnNotPermittedKillClient中,并且Apple声明它出现是因为您无法在后台运行OpenGL,并建议使用App Delegate回调来暂停您的OpenGL活动.
由于这是键盘扩展,因此没有应用程序委托.相反,我们尝试注册app委托生命周期通知:没有运气 - 他们不会开火.所以我们尝试使用viewcontroller生命周期回调,它仍然无法解决问题.
当这次崩溃发生时,我们是活跃的键盘,并且只是围绕SpriteKit/SKView和UIImage操作做了很多事情,没有明显的理由我们为什么会背景,但是这种崩溃发生了.如果我们真正做到背景,似乎也会发生同样的崩溃.
最后,我试图弄清楚如何知道我们正在进行背景化,并且我们需要暂停OpenGL.
这是完整的堆栈:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000001
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.spritekit.renderQueue
Thread 0 Crashed:
0 libGPUSupportMercury.dylib 0x000000018e89a18c gpus_ReturnNotPermittedKillClient + 12
1 libGPUSupportMercury.dylib 0x000000018e89b124 gpusSubmitDataBuffers + 160
2 GLEngine 0x0000000189a10260 gliPresentViewES_Exec + 192
3 GLEngine 0x0000000189a10164 gliPresentViewES + 80
4 OpenGLES 0x0000000189a1fc7c -[EAGLContext presentRenderbuffer:] + 68
5 SpriteKit 0x000000018a51c4a4 -[SKView _renderContent] + 1028
6 libdispatch.dylib 0x0000000196c8d368 _dispatch_client_callout + 12
7 …Run Code Online (Sandbox Code Playgroud) 我正在努力添加使用共享按钮的功能,以允许用户保存文件以用于我的主应用程序。需要支持多种文件类型(图像、视频、音频、pdf 等)。
一般用例是:用户使用标准相机应用程序拍照或使用语音备忘录应用程序进行录音。用户单击共享按钮并从共享列表中选择我的扩展程序。对话框打开,让用户有机会对文件进行描述。文件保存到我的主应用程序(包含应用程序)以后可以访问和处理的位置。
我已经能够到达提示我共享文件的地步,但是我无法找到一个位置来成功保存到我的主应用程序以后可以从中读取的位置。这甚至可能吗?有没有更好的方法来处理这种情况?
我目前正在使用 Xamarin 执行此操作,因此不支持调试(并且日志记录最少)。如果有人在目标 C 中有答案,那至少会帮助我指明正确的方向。
我想要我的扩展支持文本,网址,视频和10张图片.
这工作正常,但我希望我的扩展程序不支持图像和视频同时.
我知道我很可能必须构建一个"SUBQUERY(..)"语句.我的谓词是这样的:
SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,(
NOT ( ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
AND ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie")
) AND (
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.text")
).@count < 10
).@count == 1
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用.在这种情况下我该如何使用.谢谢你的帮助!
具体来说,从我的应用程序,我想打开消息应用程序并激活我的iMessage扩展程序:
UIApplication必须有一种方法:openURL :?
或者可能使用MFMessageComposeViewController?
我们目前正在开发iOS10应用程序,包括"Messages Extension".
为了在store.sqliteApp和Extension之间共享CoreDatas ,我们使用共享的"Apple App Group"目录,该目录运行正常.
现在我们出于调试原因而无法找到该目录.Apps容器目录是完全空的,这是有道理的.但是如何下载我们的数据库?我们是否必须以某种方式将其以编程方式复制到可到达的地方?
把它们加起来:
如果没有共享目录,我们只需使用Xcode-> Devices从设备下载App容器即可.但是当我们使用共享目录时,.sqlite数据库不在容器中.
问题: 我们如何将.sqlite数据库从设备下载到我们的计算机?
ios ×9
ios8 ×4
keyboard ×4
imessage ×1
ios10 ×1
objective-c ×1
opengl-es ×1
openurl ×1
orientation ×1
skview ×1
swift ×1
uilexicon ×1
xamarin ×1
xamarin.ios ×1