BGFMDB icon indicating copy to clipboard operation
BGFMDB copied to clipboard

调用异步的储存更新方法(bg_saveOrUpdateAsync)的时候存在一个问题。

Open Sadow32 opened this issue 6 years ago • 3 comments

我这里的情景是我需要储存的model文件的字段比较多,

当我从服务器拉下来数据以后在数组遍历数据并储存。

for (NSInteger i = 0; i < database.count; i++) {
      NSDictionary *dictionary = database[i];
      DeviceBluetoothSetting *model = [DeviceBluetoothSetting mj_objectWithKeyValues:dictionary];
      [model bg_saveOrUpdateAsync:nil];
}

但是在 BGTool.m 文件的 1026行 报了野指针错误,我猜测是因为我没有做数据的持有,遍历完就释放了model,但是当前 model 的数据比较多,model 被释放的时候还没有完成储存,所以取值的时候就报了野指针。

我这么猜测是因为我把储存方式改为 [model bg_saveOrUpdate]; 以后,这种情况就没有出现过了。

作者你看是否需要在注释里提示一下,需要一直持有要储存的对象,还是提供一个持有的解决方案?

Sadow32 avatar May 30 '18 02:05 Sadow32

的确是会存在这个问题,我后面再看一下如何做内部持有处理.

huangzhibiao avatar May 30 '18 08:05 huangzhibiao

此问题已解决

huangzhibiao avatar Jul 12 '18 06:07 huangzhibiao

异步批量数组插入还是有问题,同步则是正常的,有什么解决方案?

for(int i=0;i<1000;i++) { Human* human = [Human new]; human.sex = @"女"; human.body = @"小芳"; human.humanAge = 26; human.age = 15; human.num = 999; human.counts = 10001; human.food = @"大米"; human.data = UIImageJPEGRepresentation([UIImage imageNamed:@"MarkMan"], 1); human.array = @[@"数组1",@"数组2",@"数组3",@(1),@(1.5)]; human.dict = @{@"key1":@"value1",@"key2":@(2)}; [testA addObject:human]; }

/**
 存储标识名为testA的数组.
 */
[testA bg_saveOrUpdateAsync:^(BOOL isSuccess) {
    NSLog(@"--------------  test save success...");
}];

Arthurcsh avatar Sep 29 '18 11:09 Arthurcsh