问题出现在iOS 6上。要重现它,您需要输入带日语(假名)键盘的文本并按下“锁定”键盘。建议出现时按钮。解锁后,用户在应用程序仪表板上而不是应用程序上。如果按下应用程序图标,它会再次加载 - 按下锁定时应用程序崩溃。它甚至适用于像Notes这样的苹果应用程序
崩溃日志:
Application Specific Information:
YOUR_APP was suspended with locked system files:
/private/var/mobile/Library/Keyboard/PhraseLearning_ja_JP.db/sqlite.db
/private/var/mobile/Library/Keyboard/BigramLearning_ja_JP.db/sqlite.db
似乎iOS试图在db中保存用户的选择,使建议更具智慧性,但是当它无法写入时会写入db。
我已经向Apple发布了错误,但没人知道他们什么时候修复它
您只能对使用您的应用程序的人说这是Apple的问题 - 您需要解决它。我尝试在applicationWillResignActive上隐藏键盘并在应用程序加载时显示它,但它没有帮助很多。有什么建议吗?
更新。我希望他们能在6.0.1修复它,但不幸的是没有: - (
答案 0 :(得分:2)
使用“任务完成”延迟输入背景。
在额外时间(10分钟)内隐藏键盘。
这是解决方法。
示例:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Acquired additional time
UIDevice *device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
backgroundSupported = device.multitaskingSupported;
}
if (backgroundSupported) {
backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;
}];
}
// Hide keyboard
[self.textField resignFirstResponder];
}
答案 1 :(得分:0)
扩展另一个答案及其评论,我发现这对我有用。它的优点是您不需要知道哪个文本字段是活动的:
if ([[[UIDevice currentDevice] systemVersion] compare:@"6.0" options:NSNumericSearch] != NSOrderedAscending) {
if (backgroundTask != UIBackgroundTaskInvalid)
[application endBackgroundTask:backgroundTask];
backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;
}];
}