私はiOS 8.0デバイスを壊してしまいました。電話アプリでは通話履歴が表示され、デバイスからの通話をいくつか行ったところ、通話履歴エントリがあることを確認しています。 しかし、私が試して、/private/var/wireless/Library/CallHistory/call_history.db
にアクセスすると、データベースから取得された行はありません。iOS 8.0でcall_history.dbが空であるのはなぜですか?
ここからデバイスがコール履歴を取得する場所はどこですか? AFHIK CallHistory/call_history.dbからCallHistoryDB/CallHistory.storedataへの変更はiOS 8.3で発生しましたが、私は8.0を実行しています。
ここでコードは、SQLITE_ROWではなくSQLITE_DONEです。あなたが間違ったデータベースを見ているよう
NSString *callHisoryDatabasePath = @"/private/var/wireless/Library/CallHistory/call_history.db";
BOOL callHistoryFileExist = FALSE;
callHistoryFileExist = [fileManager fileExistsAtPath:callHisoryDatabasePath];
NSMutableArray *callHistory = [[NSMutableArray alloc] init];
if(callHistoryFileExist) {
if ([fileManager isReadableFileAtPath:callHisoryDatabasePath]) {
sqlite3 *database;
if(sqlite3_open([callHisoryDatabasePath UTF8String], &database) == SQLITE_OK) {
sqlite3_stmt *compiledStatement;
NSString *sqlStatement = [NSString stringWithString:@"SELECT * FROM call;"];
int errorCode = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1,
&compiledStatement, NULL);
if(errorCode == SQLITE_OK) {
int count = 1;
int result = sqlite3_step(compiledStatement);
while(result == SQLITE_ROW) {**** here result is SQLITE_DONE*****
...
なぜデータベースのスキームが同じであると思われますか?彼らはそれを変更しました。 CydiaからiFileをダウンロードすると、ファイルシステムをブラウズしてSQLiteデータベースを開くことができます。そのように研究するほうがずっと簡単です。またはPCにコピーします。 – creker