2012-10-04 100 views
3

問題出現在iOS 6上。要重現該問題,需要使用日語(假名)鍵盤輸入文本,並在出現建議時按下'鎖定'按鈕。解鎖用戶後,應用程序儀表板而不是應用程序。如果按下應用程序圖標,它會再次加載 - 按下鎖定時應用程序崩潰。這是真實的,即使對於蘋果應用程序,如注當使用日文鍵盤時,應用程序崩潰鎖定

崩潰日誌:

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爲單位提出建議,更多的智力,但其寫入到數據庫時,它可以不寫。

我已經發布的bug蘋果已經但是沒有人知道他們什麼時候修復它

你可以只是使用你的應用程序,這是蘋果的問題,人家說 - 你需要去解決它。我嘗試在applicationWillResignActive上隱藏鍵盤,並在應用程序加載時顯示它,但沒有多大幫助。有什麼建議麼?

UPDATE。在另外的時間(10分鐘),我希望他們將修復它在6.0.1可惜沒:-(

+0

看來這個問題已經在IOS6.1中解決了,但是我們不知道它們修復了哪個版本? 6.02? 6.03?任何詳細信息?非常感謝。 – flypig

回答

2

使用「任務完成」推遲進入後臺。
隱藏鍵盤。 這是解決辦法。

例子:

- (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]; 
} 
+0

我認爲需要更多的代碼。 如果返回 - >前 - >在10分鐘內返回(更多兩次...), 然後n次backgroundTasks創建。 而「backgroundTask = [應用程序beginBackgroundTa ...」導致泄漏前一個背景任務。 所以。然後調用「backgroundTask = [應用程序beginBackgroundTa ...」 檢查「backgroundTask!= UIBackgroundTaskInvalid」並調用endBackgroundTask:。 怎麼樣? – TopChul

+0

這似乎工作,即使沒有resignFirstResponder!所有你需要的是開始後臺任務。 –

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; 
    }]; 
} 
相關問題