HarmonyOS 鸿蒙Next getTarget()接口获取原始对象不正确问题,不知是何原因?难道是bug?

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next getTarget()接口获取原始对象不正确问题,不知是何原因?难道是bug?
开发示例中,用getTarget()接口获取状态管理框架前代理对象有问题,实际上机测试时,比对结果和示例结果不符(示例结果为true,上机运行结果是falst):如

import { UIUtils } from '@kit.ArkUI';

@Observed
class ObservedClass {
  name: string = "Tom";
}

class NonObservedClass {
  name: string = "Tom";
}

let observedClass: ObservedClass = new ObservedClass(); // 被代理
let nonObservedClass: NonObservedClass = new NonObservedClass(); // 不被代理
let globalNumberList: number[] = [1, 2, 3]; // 不被代理
let globalSampleMap: Map<number, string> = new Map([[0, "a"], [1, "b"], [3, "c"]]); // 不被代理
let globalSampleSet: Set<number> = new Set([0, 1, 2, 3, 4]); // 不被代理
let globalSampleDate: Date = new Date(); // 不被代理

@Entry
@Component
struct Index {
  @State observedObject: ObservedClass = observedClass; // 已被代理数据不会重复创建代理
  @State nonObservedObject: NonObservedClass = nonObservedClass; // 创建代理
  @State numberList: number[] = globalNumberList; // Array类型创建代理
  @State sampleMap: Map<number, string> = globalSampleMap; // Map类型创建代理
  @State sampleSet: Set<number> = globalSampleSet; // Set类型创建代理
  @State sampleDate: Date = globalSampleDate; // Date类型创建代理
  
  build() {
    Column() {
      Text(`this.observedObject === observedClass: ${this.observedObject === observedClass}`) // true
      
      Text(`UIUtils.getTarget(this.nonObservedObject) === nonObservedClass: ${UIUtils.getTarget(this.nonObservedObject) === nonObservedClass}`) // true 上机实际结果为false
      
      Text(`UIUtils.getTarget(this.numberList) === globalNumberList: ${UIUtils.getTarget(this.numberList) === globalNumberList}`) // true
      
      Text(`UIUtils.getTarget(this.sampleMap) === globalSampleMap: ${UIUtils.getTarget(this.sampleMap) === globalSampleMap}`) // true 上机实际结果为false
      
      Text(`UIUtils.getTarget(this.sampleSet) === globalSampleSet: ${UIUtils.getTarget(this.sampleSet) === globalSampleSet}`) // true 上机实际结果为false
      
      Text(`UIUtils.getTarget(this.sampleDate) === globalSampleDate: ${UIUtils.getTarget(this.sampleDate) === globalSampleDate}`) // true 上机实际结果为false
    }
  }
}

更多关于HarmonyOS 鸿蒙Next getTarget()接口获取原始对象不正确问题,不知是何原因?难道是bug?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next getTarget()接口获取原始对象不正确问题,不知是何原因?难道是bug?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对“HarmonyOS 鸿蒙Next getTarget()接口获取原始对象不正确问题”,可能的原因包括但不限于以下几点:

  1. 接口实现问题:getTarget()接口在鸿蒙系统中的具体实现可能存在缺陷或未完全遵循预期设计,导致返回的对象不正确。这可能是由于鸿蒙系统的开发迭代过程中,接口行为有所变更但未及时更新文档或通知开发者。

  2. 对象生命周期管理:如果对象在被getTarget()调用前已被销毁或状态发生改变,那么接口返回的可能是一个已失效或不一致的对象引用。检查对象的生命周期管理,确保在调用getTarget()时对象仍处于有效状态。

  3. 多线程同步问题:在多线程环境下,如果对象的状态被多个线程同时修改,可能导致getTarget()在读取对象状态时获取到不一致的数据。确保对对象状态的访问是线程安全的。

  4. API使用不当:检查getTarget()的使用方式是否符合鸿蒙系统的API规范,包括参数传递、上下文环境等。

如果上述检查均未能解决问题,可能确实存在系统级的bug。此时,建议详细记录问题复现步骤、错误日志及系统版本信息,提交给鸿蒙系统的官方支持渠道。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部