cjh*_*ill 15 sqlite google-analytics objective-c ios google-analytics-sdk
2015年8月19日 - 在3.13更新中似乎已经修复了Bug ,即使他们在更改日志中列出的唯一内容是"Fixed an issue which caused crashes when using setCampaignParametersFromUrl".想拿就拿吧.
2015年6月8日 - 仍然遇到这个问题.如果我禁用自动发送事件([GAI sharedInstance].dispatchInterval = -1;)然后我仍然收到错误.因此,我认为问题在于将事件插入到谷歌分析SQLite数据库中,不知何故我正在进行的数据库语句正在变为现实void.
2015年6月10日 - 仍然遇到崩溃.试图删除我的控制器,手动扩展GAITrackedViewController和发送createScreenView轨道,不会改变崩溃频率.
2015年6月25日 - 仍然遇到崩溃.
我已经添加Google Analytics SDK 3.12到我的iPhone应用程序,一切都按预期工作 - 我运行应用程序,可以看到我在Web界面上设置的所有点击和事件.
我正在我的AppDelegate右上角初始化SDK didFinishLaunchingWithOptions,如下所示:
[[GAI sharedInstance] trackerWithTrackingId:GOOGLE_ANALYTICS_ID];
Run Code Online (Sandbox Code Playgroud)
但是,我发现当我尝试自己使用SQLite时,运行Google Analytics会产生错误.它们可能表现为严重错误,例如:
"Database disk image is malformed" 然后insta-crashes"Disc i/O error" 每当我运行一个查询(虽然没有崩溃)而且它们也会导致我自己的SQLite查询失败,例如:
if (! sqlite3_prepare_v2(_db, [sql UTF8String], -1, &_statement, NULL) == SQLITE_OK) {`
// ..
// ..
if (sqlite3_step(_statement) == SQLITE_ROW) {
Run Code Online (Sandbox Code Playgroud)
将随机导致以下错误:
sqlite3_prepare_v2 EXC_BAD_ACCESS (code=1, address=0x6800000000)
如果我注释掉SDK的初始化,那么一切都会变得非常稳定.再次取消注释它会在一分钟内崩溃应用程序.
我在运行8.3(12F70)的iPhone 6上运行此功能.
尝试卸载并重新安装应用程序.
我已添加了Google Analytics的所有先决条件; 所有.m文件到库,libGoogleAnalyticsServices.a文件,还有Linked Frameworks and Libraries.
我也有Crashlytics,但尝试从代码([Fabric with:@[CrashlyticsKit]];)中删除它并从Linked Frameworks and Libraries具有完全相同结果的库中删除它.
// In didFinishLaunchingWithOptions
[Db setup];
[Db connect];
Run Code Online (Sandbox Code Playgroud)
Db * db = [[Db alloc] init];
if ([db prepare:@"SELECT * FROM `table` WHERE `id` = ?" withBindings:@[@"123"]]) {
while ([db stepThrough]) {
// ..
}
}
[db finalise];
Run Code Online (Sandbox Code Playgroud)
(已指出错误与评论一起出现的位置)
@implementation Db
static sqlite3 * _db;
static NSString * _dbPath;
#pragma mark - Setup
+ (BOOL)setup {
NSString * sqlBundlePath = [[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite"];
NSString * documentsFolder = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString * sqlDocumentPath = [[documentsFolder stringByAppendingPathComponent:@"db"] stringByAppendingPathExtension:@"sqlite"];
NSFileManager * fileManager = [NSFileManager defaultManager];
if (! [fileManager fileExistsAtPath:sqlDocumentPath]) {
NSError * error;
BOOL success = [fileManager copyItemAtPath:sqlBundlePath toPath:sqlDocumentPath error:&error];
if (! success) {
return NO;
}
}
_dbPath = sqlDocumentPath;
return YES;
}
+ (BOOL)connect {
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
return sqlite3_open([_dbPath UTF8String], &_db);
}
#pragma mark - Querying
- (BOOL)prepare:(NSString *)sql withBindings:(NSArray *)bindings {
// ERROR CAN OCCUR ON THE FOLLOWING LINE
if (! sqlite3_prepare_v2(_db, [sql UTF8String], -1, &_statement, NULL) == SQLITE_OK) {
NSLog(@"Error whilst preparing query: %s", sqlite3_errmsg(_db));
sqlite3_finalize(_statement);
return NO;
}
for (int i = 0; i < [bindings count]; i++) {
sqlite3_bind_text(_statement,
i + 1,
[bindings[i] isKindOfClass:[NSNull class]] ? [@"" UTF8String] : [bindings[i] UTF8String],
-1,
SQLITE_TRANSIENT);
}
return YES;
}
- (BOOL)stepThrough {
// ERROR CAN OCCUR ON THE FOLLOWING LINE
if (sqlite3_step(_statement) == SQLITE_ROW) {
return YES;
}
sqlite3_finalize(_statement);
return NO;
}
- (void)finalise {
sqlite3_finalize(_statement);
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |