diff --git a/extension/apple/ExecuTorch/Exported/ExecuTorchModule.mm b/extension/apple/ExecuTorch/Exported/ExecuTorchModule.mm index 7b0b15c00d0..30222802f9b 100644 --- a/extension/apple/ExecuTorch/Exported/ExecuTorchModule.mm +++ b/extension/apple/ExecuTorch/Exported/ExecuTorchModule.mm @@ -331,12 +331,21 @@ - (nullable ExecuTorchMethodMetadata *)methodMetadata:(NSString *)methodName - (nullable NSArray *)executeMethod:(NSString *)methodName withInputs:(NSArray *)values error:(NSError **)error { - std::vector inputs; - inputs.reserve(values.count); - for (ExecuTorchValue *value in values) { - inputs.push_back(toEValue(value)); + const char *methodNameString = methodName.UTF8String; + __block auto errorCode = Error::Ok; + [values enumerateObjectsUsingBlock:^(ExecuTorchValue *value, NSUInteger index, BOOL *stop) { + errorCode = _module->set_input(methodNameString, toEValue(value), index); + if (errorCode != Error::Ok) { + *stop = YES; + } + }]; + if (errorCode != Error::Ok) { + if (error) { + *error = ExecuTorchErrorWithCode((ExecuTorchErrorCode)errorCode); + } + return nil; } - const auto result = _module->execute(methodName.UTF8String, inputs); + const auto result = _module->execute(methodNameString); if (!result.ok()) { if (error) { *error = ExecuTorchErrorWithCode((ExecuTorchErrorCode)result.error());