![](/img/trans.png)
[英]IOS app unable to access files in background when screen locked with passcode
[英]unable to open database file when passcode locks immediately
在設備設置中,“自動鎖定”為5分鍾,“密碼鎖定”為“立即”。
假設用戶在應用程序正在處理來自服務器的較大xml並插入/更新數據庫文件時單擊了設備的電源按鈕。 (當用戶單擊電源按鈕時,設備將處於隱藏狀態)當設備被鎖定時,我們會看到類似
failed to CREATE statement with message 'unable to open database file'.' or disk I/O error
處理xml時,我們正在執行sqlite3_step,sqlite3_exec,sqlite3_prepare_v2操作。
嘗試了這些..
下面是打開數據庫文件的源代碼,這是應用程序委托類中返回數據庫文件的代碼。 我們從不同的類調用此方法。 databasemain是在AplicationDelegate.h文件中聲明的sqlite3 *的實例。
- (sqlite3 *) getMainDatabase{
if(databasemain == nil){
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"mydb.sqlite"];
if (sqlite3_open_v2([dbPath UTF8String], &databasemain, SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_FILEPROTECTION_COMPLETEUNLESSOPEN, NULL) == SQLITE_OK){
}else{
MyLogAll(@"db not opened");
}
}
return databasemain;
}
還嘗試使用SQLITE_OPEN_FILEPROTECTION_NONE,但沒有更改。
也嘗試了沒有加密參數
如果(sqlite3_open([dbPath UTF8String],&database)== SQLITE_OK){
}
在設備鎖定狀態下,也會丟失存儲在NSUserDefaults中的值。
請分享您的經驗,以指導我正確的方向。
尋找一種方法來處理這種立即密碼鎖定的情況。
如果具有密碼並且設備已鎖定,則寫入數據庫(文件)將獲得磁盤I / O錯誤。 對於某些設備,您可以修改打開標記(SQLITE_OPEN_FILEPROTECTION_NONE)以解決問題,但是此方法在其他設備上無效,然后可以修改上層目錄FileProtection屬性,例如:
[[NSFileManager defaultManager] setAttributes:[NSDictionary dictionaryWithObject:NSFileProtectionNone forKey:NSFileProtectionKey] ofItemAtPath:[NSHomeDirectory() stringByAppendingFormat:@"/Documents"] error:NULL];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.