gpt4 book ai didi

objective-c - 在自定义委托(delegate) block UI 中执行工作——为什么?

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

我写了一个自定义的“JSON fetcher”。从我的 View Controller 我调用 [loader start];loader完成后,它运行委托(delegate)方法[self.delegate doneLoading]; .

这一切都有效,但是 UI 被阻止 - 无法移动任何东西 - 直到加载器完成。我认为如果我通过自己的委托(delegate)方法进行加载,就不会发生这种情况。我在这里想念什么?我需要调用一些额外的方法吗?

- (void)getBandArray
{
if (![self localBandVersion] || [self remoteBandVersion] > [self localBandVersion] || !CACHING) {
NSLog(@"Band array loaded remotely.");
[self startLoadingBands];
}else{
NSLog(@"Band array loaded from disk.");
[self loadBandsFromDisk];

}
}

startLoadingBands 启动 NSURLConnection,loadBandsFromDisk 看起来像这样:
- (void)loadBandsFromDisk
{
NSData *dataFromDisk = [NSData dataWithContentsOfFile:[self fileStringForTag:JNKBandTag]];
if (dataFromDisk) {
NSLog(@"Found band cache on disk...");

NSString *strToParse = [[NSString alloc] initWithData:dataFromDisk encoding:NSUTF8StringEncoding];
SBJsonParser *jsonObject = [[SBJsonParser alloc] init];
NSError *jsonError;
NSArray *parsedResult = [jsonObject objectWithString:strToParse error:&jsonError];
[strToParse release];
[jsonObject release];

if (parsedResult && [parsedResult count] > 0) {
NSLog(@"Parsed bands, handing over to delegate...");

NSMutableArray *bandArray = [NSMutableArray array];
for (NSDictionary *bandDict in parsedResult) {
[bandArray addObject:[JNKBand bandWithDictionary:bandDict]];
}

if ([self.delegate respondsToSelector:@selector(bandArrayArrived:)]) {
[self.delegate bandArrayArrived:bandArray];
}
}else{
NSLog(@"Error parsing bands, calling delegate...");
if ([self.delegate respondsToSelector:@selector(bandArrayFailed)]) {
[self.delegate bandArrayFailed];
}
}
}else{
if ([self.delegate respondsToSelector:@selector(bandArrayFailed)]) {
[self.delegate bandArrayFailed];
}
}
}

奇怪的是,一旦连接完成,它最终也会调用 loadFileFromDisk 但这很顺利......

最佳答案

这是在阻塞其他一切的主线程上运行的。您将不得不在后台进行加载。使用performSelectorInBackground:withObject在后台进行加载,如果委托(delegate)方法应该影响 UI,您应该将请求发送回主线程。

关于objective-c - 在自定义委托(delegate) block UI 中执行工作——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142847/

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