【TUYA SDK集成八十一难】iOS使用sortDeviceOrGroupWithOrderList设备排序后,云端返回数组顺序没变化

App开发相关产品技术讨论,包括OEM App、App SDK等话题


Post Reply
taojingGino
Posts: 23

问题:调用sortDeviceOrGroupWithOrderList给家庭下的设备进行排序,再次取家庭设备列表后,数组顺序没有变化,百思不得其解

解决方法:调用sortDeviceOrGroupWithOrderList后,返回数据的TuyaSmartDeviceModel.homeDisplayOrder发生了变化,通过homeDisplayOrder对数组重新排序即可

返回的homeDisplayOrder打印出来是这样的

Code: Select all

2022-11-25 17:30:12.755647+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 6
2022-11-25 17:30:12.755838+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 5
2022-11-25 17:30:12.755937+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 4
2022-11-25 17:30:12.756020+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 3
2022-11-25 17:30:12.756087+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 2
2022-11-25 17:30:12.756181+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 1
2022-11-25 17:30:12.756253+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 0
2022-11-25 17:30:12.756327+0800 tuya-bizbundle-ios-sample-objc_Example[92430:2936564] 7

homeDisplayOrder是int类型,遍历deviceList,把homeDisplayOrder当作index塞进数组即可完成排序,然后展示即可

排序代码可以参考

Code: Select all

NSMutableArray *sortDeviceArr = [NSMutableArray new];
for (int i=0; i<self.home.deviceList.count; i++) {
  for (int j=0; j<self.home.deviceList.count; j++) {
    if (self.home.deviceList[j].homeDisplayOrder == i) {
      [sortDeviceArr addObject:self.home.deviceList[j]];
      break;
    }
  }
}

原因:开始觉得这种奇怪的设计难以理解,后来想想他是把排序的算力分发到了设备端,不然每次从数据库取的时候用order by排序都要消耗一次云端算力,可能是获取设备列表的请求太频繁了吧,android应该也是这样设计的,可以参考这个思路

Post Reply