gpt4 book ai didi

ios - 如何不卡住 UI 并等待响应?

转载 作者:行者123 更新时间:2023-11-28 11:34:01 25 4
gpt4 key购买 nike

我从早上开始就一直在努力,但我没有达到我想要的。

我尝试了 DispatchQueue.main.async 和完成 block ,但 UI 中的“提交”按钮仍然卡住,等待数据从服务器返回。这是我的代码:

func createData(request:Crudpb_CreateRequest, with completion: @escaping (String) -> Void) throws {
DispatchQueue.main.async {
self.response = try! self.client.create(request) // <---- How to handle error for this server call when the server is not available or is down?
completion(self.response.result)
}
}

我刚刚注意到我从下面调用第一个方法,这是一个同步一元,这可能是问题背后的原因。但是我又不知道如何在休闲中调用第二个函数:

 /// Synchronous. Unary.
internal func create(_ request: Crudpb_CreateRequest, metadata customMetadata: Metadata) throws -> Crudpb_CreateResponse {
return try Crudpb_CrudServiceCreateCallBase(channel)
.run(request: request, metadata: customMetadata)
}
/// Asynchronous. Unary.
@discardableResult
internal func create(_ request: Crudpb_CreateRequest, metadata customMetadata: Metadata, completion: @escaping (Crudpb_CreateResponse?, CallResult) -> Void) throws -> Crudpb_CrudServiceCreateCall {
return try Crudpb_CrudServiceCreateCallBase(channel)
.start(request: request, metadata: customMetadata, completion: completion)
}

服务器端代码:

func (*server) Create(ctx context.Context, req *crudpb.CreateRequest) (*crudpb.CreateResponse, error) {

var result string
firstName := req.GetAccount().GetFirstName()
lastName := req.GetAccount().GetLastName()
// id := gocql.TimeUUID()

fmt.Println("Triggered CREATE function on Go Server " + firstName + " " + lastName + "! Yayy!")

result = fmt.Sprintf("id for %s %s : %s", firstName, lastName, strconv.Itoa(rand.Intn(100)))
return &crudpb.CreateResponse{
Result: result,
}, nil

我需要这个应用程序/提交按钮在从服务器获取结果时不要卡住。

请帮忙。

最佳答案

您仍在主线程上执行工作。async 仅使 createData() 方法在任务完成之前返回。但是任务仍将在主线程中的某个时间处理,在此期间您的应用程序将变得无响应..尝试使用全局队列来代替..以保持主线程清洁..

不要忘记在收到响应后在主线程上执行所有 UI 工作。

关于ios - 如何不卡住 UI 并等待响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56049420/

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