gpt4 book ai didi

ios - 从字典访问 FlutterStandardTypedData 时出现 "[__NSArrayI data]: unrecognized selector"

转载 作者:行者123 更新时间:2023-11-29 05:09:32 24 4
gpt4 key购买 nike

我正在尝试在 Flutter 中创建一个 Uint8List,将其放入 JSON 字符串中并将该字符串传递给 native 代码。这是我的Flutter 代码:

final jsonObj = {
"dataBuffer": dataBuffer, // dataBuffer is of type Uint8List
};

String encodedJson = json.encode(jsonObj);

await _channel.invokeMethod('testMethod', <String, dynamic>{
'jsonObj': encodedJson,
});

这是 native iOS 代码,我尝试从 JSON 字符串中获取 Uint8List 作为 FlutterStandardTypedData:

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([@"testMethod" isEqualToString:call.method]) {
NSString* jsonString = (NSString*)call.arguments[@"jsonObj"];
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

NSError *error = nil;
NSDictionary *responseObj = [NSJSONSerialization
JSONObjectWithData:jsonData
options:0
error:&error];

if(! error) {
FlutterStandardTypedData *dataBufferJson = [responseObj objectForKey:@"dataBuffer"];
NSData *bufferData = [dataBufferJson data]; *** // Here is where the exception is thrown ***
}
}
}

当我尝试获取 FlutterStandardTypedDatadata 属性时,出现以下异常:

'NSInvalidArgumentException', reason: '-[__NSArrayI data]: unrecognized selector sent to instance 0x7ff8f21ad000'

我无法理解收到此错误的原因,但我认为它正在处理 Uint8List 已放入 JSON 中的事实,或者与我正在处理的事实尝试以错误的方式从字典中获取 FlutterStandardTypedData 。无论如何我找不到解决方案。

我还尝试以另一种方式将 Uint8List 从 Flutter 传递到 native :在 Dart 中,我将 Uint8List 直接传递给 native 代码(没有将其封装在 JSON 中)字符串)。这样我就可以成功获取 FlutterStandardTypedData 对象。这是另一个示例的代码。

Dart 代码:

await _channel.invokeMethod('testMethod',
dataBuffer, // example Uint8List
);

iOS 代码:

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([@"testMethod" isEqualToString:call.method]) {
FlutterStandardTypedData* dataBuffer = (FlutterStandardTypedData*)call.arguments[@"dataBuffer"];
}
}

但是我需要通过 JSON 字符串传递 Uint8List

如何将 Uint8List 从 Flutter 传递到 iOS 原生,并将其封装在 JSON 字符串中?

最佳答案

我猜测您想要做的是跨 Dart 原生边界传递多个“参数”。使用Map<String, dynamic>为了这。例如:

await _channel.invokeMethod('testMethod', <String, dynamic>{
'bytes': dataBuffer, // example Uint8List
'someBool': true,
'someInt': 123,
}
);

在 native 端,您将获得一个映射或字典,其中包含作为键的键名称和作为其 native 等效项的值(例如 bool -> Boolean 等)

关于ios - 从字典访问 FlutterStandardTypedData 时出现 "[__NSArrayI data]: unrecognized selector",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59814641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com