iOS下FMDB执行循环插入SQL时崩溃的原因排查求助
iOS下FMDB执行循环插入SQL时崩溃的原因排查求助
大家好,最近遇到个头疼的问题,想请各位帮忙分析下:
我在iOS项目里用FMDB结合SQLCipher做数据插入,发现一个奇怪的现象:当只插入1条数据的时候完全没问题,但循环插入2到99条数据时,程序直接崩溃了,而且控制台没有任何错误输出,崩溃断点直接指向SQLCipher SDK里的某个.c文件的代码(我看不懂C代码,完全摸不着头脑😅)。
先贴两段关键代码:
不崩溃的代码(单次插入)
if (stockArr.count == 1) { for (Stock *model in stockArr) { model.TW = nil; // 故意这么写的,目的是让SQL执行时对应字段值从9变成7 model.EN = nil; // 同上 NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO stk (ID, C, N, TW, EN, TC, MC, MR, LEG) VALUES (?,?,?,?,?,?,?,?,?)"]; NSArray *arr = @[model.ID,model.C, model.N, model.TW, model.EN, model.TC,model.MC,model.MR, model.LEG]; // 这里用了安全SDK,nil会被自动过滤不会导致数组崩溃,这点可以忽略 BOOL result = [db executeUpdate:insertStr withArgumentsInArray:arr]; } }
会崩溃的代码(循环插入2-99条)
if (stockArr.count > 1 && stockArr.count < 100) { for (Stock *model in stockArr) { model.TW = nil; // 故意这么写的,目的是让SQL执行时对应字段值从9变成7 model.EN = nil; // 同上 NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO stk (ID, C, N, TW, EN, TC, MC, MR, LEG) VALUES (?,?,?,?,?,?,?,?,?)"]; NSArray *arr = @[model.ID,model.C, model.N, model.TW, model.EN, model.TC,model.MC,model.MR, model.LEG]; // 这里用了安全SDK,nil会被自动过滤不会导致数组崩溃,这点可以忽略 BOOL result = [db executeUpdate:insertStr withArgumentsInArray:arr]; } }
补充说明:代码里把model.TW和model.EN设为nil是故意的,而且那个安全SDK确实能处理nil,不会因为数组里有nil就崩溃,这点已经确认过了。
现在我特别困惑的是:为什么单次插入完全正常,一循环就崩在SQLCipher的底层代码里?因为看不懂C代码,希望各位能用大白话帮我分析下可能的根本原因,万分感谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

