为什么 call_history.db 在 iOS 8.0 上是空的?

Why is the call_history.db empty on iOS 8.0?

我越狱了 iOS 8.0 设备,在 Phone 应用程序中我可以看到有通话记录,我刚刚打了几个电话 from/to它确保应该有通话记录条目的设备。 但是,当我尝试访问 /private/var/wireless/Library/CallHistory/call_history.db 时,没有从数据库中检索到任何行。

如果设备不是从这里获取通话记录,那么设备从哪里获取通话记录呢?据我所知,从 CallHistory/call_history.db 到 CallHistoryDB/CallHistory.storedata 的位置发生在 iOS 8.3 中,但我是 运行 8.0.

这是代码,它得到 SQLITE_DONE 而不是 SQLITE_ROW。

  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*****
                ...

call_history.db(无线域)到 CallHistory.storedata(主域)的更改是在 iOS 8.0 上完成的,因此您正在查看错误的数据库。

CallHistory.storedata 也是 SQLite,即使它是一个 CoreData 数据库。
很明显,表和字段是完全不同的。