在主线程上访问Realm属性崩溃

时间:2017-07-27 18:45:42

标签: ios multithreading realm

我正在尝试获取领域对象并将它们存储在字典中,其中键是日期字符串。

我开始在领域队列中提取对象

//im doing this as data fetch is taking too much time
dispatch_async( [[ActivityManager sharedInstance]getRealmQueue], ^{
   [self getActivitiesForStartDate:_startDate endDate:_endDate];
 });

getActivitiesForStartDate的作用是:

  1. 获取日期数组
  2. 对于数组中的每个日期,获取要在tableview上显示的领域对象

    RLMResults *activityResults = [[[self getActivitySource]activities] objectsWhere:@"my predicate string"];
    

    并枚举已获取的活动,并根据条件

    将它们添加到数组中
    for (RealmActivity *tempActivity in tempActArr){
        if (tempActivity.startTime) {
      //condition met
                [dataArr addObject:@{@"activity":tempActivity,
                                     @"occurence":selectedDate}];
        }else{
              [dataArr addObject:@{@"activity":tempActivity,
                                     @"occurence":tempActivity.startTime}];
            }
    }
    
  3. 完成数据提取后,我尝试在tableview上加载领域对象。

    然而,当我尝试在cellForRow方法中访问Realm对象时,它会崩溃应用程序,说试图从错误的线程访问Realm:

    - (void)configureCell:(TaskListViewCell *)cell forIndexPath:(NSIndexPath *)indexPath
    {
    
       NSArray *ar = self.dataDictionary[[[self.monthView dateSelected]shortDateString]];
    
        RealmActivity *activity = ar[indexPath.section];
        cell.dateTime.text = activity.Type; <- crashes here
        cell.regarding.text = activity.regarding;
        cell.location.text =activity.location;
    
    }
    

    我看到在主线程上调用configureCell,但是如何正确使用Realm以避免崩溃?

    我不知道如何使用RLMThreadSafeReference来准备数据源。

0 个答案:

没有答案