gpt4 book ai didi

iphone - 我怎么知道 nsoperation queue 何时完成所有请求以便我可以重新加载我的 tableview?

转载 作者:太空狗 更新时间:2023-10-30 03:57:52 24 4
gpt4 key购买 nike

我正在使用 ASIHTTPRequest 和 NSOperationQueue 从不同的链接下载数据到

在后台线程中下载。当请求完成时,我使用 requestFinished 进行解析

ASIHTTPRequest 的委托(delegate)方法。我想在 tableview 中的所有请求时更新 tableview 中的数据

队列已完成。有什么方法可以知道 NSOperationQueue 何时处理完所有

要求?我的意思是队列有任何变量,如“isEmpty”或任何委托(delegate)方法,如“queueDidCompletedAllOperation”?

请帮忙。

代码如下:

//source

@interface SourceModel : NSObject

@property (nonatomic, retain) NSString * link;

@property (nonatomic, retain) NSString * name;

@end


//for rssGroup

@interface CompleteRSSDataModel : NSObject

@property (nonatomic,strong) SourceModel * source;

@property (nonatomic,strong) KissXMLParser * parser;

@property (nonatomic,strong) NSArray * rssArticles;

@end

- (void)viewDidLoad
{
for (int index=0; index<[rssGroups count]; index++) {

NSString * urlString = [[[rssGroups objectAtIndex:index] source] link];

NSURL *url = [NSURL URLWithString:urlString];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self];

//set this request's tag to group index of this source(link). See requestFinished for use of this :)
[request setTag:index];

[self.queue addOperation:request];
}

}


- (void)requestFinished:(ASIHTTPRequest *)request {

NSLog(@"%@",@"RSS Data got from internet successfully :))");


int groupIndex = [request tag];

CompleteRSSDataModel * group = [rssGroups objectAtIndex:groupIndex];

group.parser = [[KissXMLParser alloc]initWithData:[request responseData]];

if (group.parser == nil) {

NSLog(@"%@",@"Failed - Error in parsing data :((");
}

else {
NSLog(@"%@",@"Data Parsed successfully :))");

group.rssArticles = [group.parser itemsInRss];

//So i want to check here that queue is empty, reload data, but as my information, i don't know any method like hasCompletedAllRequested

//if(self.queue hasCompletedAllRequests) {

// [self.tableview reloadData];
//}


}
}

- (void)requestFailed:(ASIHTTPRequest *)request {

NSLog(@"%@",@"Error in Getting RSS Data from internet:((");

}

最佳答案

如果所有操作都已完成,则 operations 数组计数将为零。

要检查这一点,您可以使用键值观察编码来观察 NSOperationQueueoperations

为关键的 options 设置观察者如下:

[self.queue addObserver:self forKeyPath:@"operations" options:0 context:NULL];

然后在您的 observeValueForKeyPath 中执行此操作,如下所示:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
change:(NSDictionary *)change context:(void *)context
{
if (object == self.queue && [keyPath isEqualToString:@"operations"]) {
if ([self.queue.operations count] == 0) {
// Do something here when all operations has completed
NSLog(@"queue has completed");
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
}

在 iOS 4.0 之后,您可以使用 operationCount 属性,例如 self.queue.operationCount == 0 而不是像这样检查 [self.queue.operations count ] == 0

关于iphone - 我怎么知道 nsoperation queue 何时完成所有请求以便我可以重新加载我的 tableview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11912000/

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