【发布时间】:2016-04-07 19:05:38
【问题描述】:
我有一个越狱的 iOS 8.0 设备,在“电话”应用程序中,我可以看到有一个通话记录,我刚刚从/向该设备拨打了几次电话,它确保应该有通话记录条目。
但是,当我尝试访问 /private/var/wireless/Library/CallHistory/call_history.db 时,没有从数据库中检索到任何行。
如果设备不是从这里获取通话记录,那么设备从哪里获取通话记录? AFAIK 从 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*****
...
【问题讨论】:
-
为什么你认为数据库的方案是一样的?他们改变了它。从 Cydia 下载 iFile,您可以浏览文件系统并打开 SQLite 数据库。这样研究起来容易得多。或将其复制到您的 PC。