使用日语键盘时,应用程序在Lock上崩溃

时间:2012-10-04 15:27:58

标签: iphone objective-c ios6

问题出现在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修复它,但不幸的是没有: - (

2 个答案:

答案 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;
    }];
}