gpt4 book ai didi

objective-c - NSThread 和更新 subview 中的对象

转载 作者:行者123 更新时间:2023-12-04 03:16:33 25 4
gpt4 key购买 nike

在我的应用程序中,我想在按下按钮时更新我的​​数据库。因为这项工作需要一些时间并且不卡住洞应用程序,所以我决定使用 NSThread。

此过程可以从不同的 View 启动,因此我已将更新代码放置在我的应用程序委托(delegate)中。当按下更新方法时,我有以下代码:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:delegate withObject:nil];

在我的代表中:

- (void)startTheBackgroundJob {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//do some stuff here
self.percentageCompleted = (i * 100) / totalChars;
[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshObjectsForUpdate" object:self];
//some other stuff
[pool release];

基本上在我的线程中,我想用当前进度更新不同的进度 View 。因此,我使用 NSNotificationCenter 在线程的每一步之后发送一条消息。

在 viewController 中,我正在捕获此消息,并且正在执行以下操作:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];

double prc = delegate.percentageCompleted;
UILabel *l = (UILabel *)[self.view viewWithTag:444];
l.text = [NSString stringWithFormat:@"%f", prc];

但它仅在线程结束时刷新我的标签。

这里有什么问题吗?我可以使用另一种方法吗?

谢谢。

最佳答案

来自Apple's documentation :

In a multithreaded application, notifications are always delivered in the thread in which the notification was posted...

因此,您需要执行代码以在主线程上显式更新 UI(使用 performSelectorOnMainThread:withObject:waitUntilDone: 或任何合适的方法)。

关于objective-c - NSThread 和更新 subview 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5704241/

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