如何将 FlutterStandardTypedData 转换为 NSArray?



我有一个用dart编写的应用程序,它使用通道在Objective-C中调用方法。该方法需要 NSArray 形式的数据才能采取行动。我从dart将这些数据作为Uint8List传递,但在Objective-C中,它显示它是一个FlutterStandardTypedData。有没有办法将其转换为NSArray?提前谢谢。

您可能必须使用类似以下内容将其从FlutterStandardTypedData中复制出来...(请注意,在此示例中,类型化数据是双精度 - 您可能有字节)

if let args = call.arguments as? Dictionary<String, Any>,
let au = args["data"] as? FlutterStandardTypedData {

au.data.withUnsafeBytes{(pointer: UnsafeRawBufferPointer) in
let doubles = pointer.bindMemory(to: Double.self)
for index in 0..<Int(au.elementCount) {
// copy to the NSArray
}
}
result(nil)
} else {
result(FlutterError.init(code: "errorProcess", message: "data or format error", details: nil))
}

我在使用FlutterStandardTypedData时也遇到了问题。 从我正在阅读的内容来看,这应该在 iOS 端"自动神奇地"序列化,因为它是一种受支持的数据类型。 例如,我可以看到字节缓冲区的长度是我期望的值。 我的问题是我似乎无法以与我可以看到长度值相同的方法访问字节数据的单个值。 "无法识别的 FlutterStandardTypedData 选择器"每当我尝试像数组一样访问它时......我也找不到好的文档。 如果我使用简单的数据类型,如字符串,事情就会很好。 我只是被更复杂的数据类型烧伤了......

我想通了,在插件中你必须使用 FlutterStandardTypedData 作为数组的数据类型,然后你可以在原生 iOS 端看到 .data 元素。 如果没有这种数据类型,进入iOS端我可以"看到"数据,但每次尝试访问列表中的数据(对象/元素)时都会出现内存异常。 Xcode 之前在 IDE 中将我的 NSArray 转换为 FlutterStandardTypedData(即使我指定了 NSArray 而不是 FlutterStandard...)神奇地自动转换,但同样,每当我尝试与对象一起工作时都会出错。 简单地从插件中的NSArray更改为FlutterStandardTypedData解决了我的问题,只是花了一段时间才弄清楚b/c文档不是很清楚(我遇到了)。

最新更新