gpt4 book ai didi

ios - UI 更新缓慢*仅*如果响应 NSURLSessionUploadTask 完成 block 中发生的更改而调用

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

该应用程序与我服务器上的 php 脚本交互。用户可以创建预订,并将详细信息写入数据库。随后,他们可以取消该预订。

在应用程序中,预订是一个对象,负责从服务器收集自己的详细信息。预订也可以自行取消(根据用户的要求) - 按 BookingViewController 中的“取消按钮”调用预订的(void)cancelBooking方法,发布到 bookings-cancel.php使用 NSURLSessionUploadTask 和从 @{ @"invoiceNumber": self.invoiceNumber } 滚动的 json 数据.

数据库已更新,uploadSession 返回新的详细信息,并且预订会相应更新。所有这一切都很好地响应 - 在不到一秒钟的时间内,始终如一地启动和返回。

问题当我尝试在 BookingViewController 上更新 UI 时出现(交货日期和价格的标签)使用从预订对象更新后(在 uploadSession 完成 block 内)读取的值。

BookingViewController 被分配为预订的委托(delegate)。预订是在其自己的“价格”属性上为 KVO 设置的。每当价格发生变化时,预订都会调用委托(delegate)方法 priceDidChange:(NSString *)updatedPriceBookingViewController , 触发 NSLog并更新到 deliveryLabel.textpriceLabel.text .

- (void)priceDidUpdate:(NSString *)updatedPrice {
NSLog(@"priceDidUpdate delegate notification - updatedPrice is: %@", updatedPrice);
[self.deliveryLabel setText:@"N/A"];
[self.priceLabel setText:updatedPrice];
}

测试表明,如果我直接从“取消”按钮或使用 cancelBooking 中的任何其他显式命令(例如 self.price = @"123.45")更新价格uploadTask 之外的方法,然后 UI 更新速度与 NSLog 一样快被写出(即,几乎瞬间)。

但是,如果价格在 uploadTask 完成 block 中更新,NSLog 将同样响应地写出 但更新到 deliveryLabel.text和 priceLabel.text 出现的速度很慢 - 延迟大约在 5 到 12 秒之间变化。

我有 NSLogs到处都是,并且我相信这不仅仅是延迟将更新值传入或传出预订对象。我已经很容易看到了二十次“ priceDidUpdate delegate notification - updatedPrice 是:0.00”(更新后的价格),然后在 self.priceLabel.text 之前计数到 10实际上设置为 @"0.00" .完全被难住了。

万一这很重要, NSURLSession使用 ephemeralSessionConfiguration 配置没有调整。
BookingViewController 中的 UI 更新有什么原因吗?根据是否调用 priceDidChange 应该需要更长的时间。来自uploadTask 完成 block 的内部还是外部?

提前致谢!

最佳答案

使用主队列更新 UI。使用以下代码:

- (void)priceDidUpdate:(NSString *)updatedPrice 
{
dispatch_async(dispatch_get_main_queue(), ^()
{
//Add method, task you want perform on mainQueue
//Control UIView, IBOutlet all here
NSLog(@"priceDidUpdate delegate notification - updatedPrice is: %@", updatedPrice);
[self.deliveryLabel setText:@"N/A"];
[self.priceLabel setText:updatedPrice];
});
}

关于ios - UI 更新缓慢*仅*如果响应 NSURLSessionUploadTask 完成 block 中发生的更改而调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732698/

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