gpt4 book ai didi

iphone - 在 iPhone 上排队和处理多个请求

转载 作者:行者123 更新时间:2023-12-03 20:16:39 24 4
gpt4 key购买 nike

在我的应用程序中,我使用 NSOperationQueue 和 NSInitationOperation 对象来执行所有操作。我的应用程序中有多个队列,并且我正在使用 KVO“isFinished”,我在主线程上执行下一个操作。

问题是:每当我依次执行两个操作时,我的应用程序就会崩溃并显示:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<myViewController: 0x481b200>: An     -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: isFinished
Observed object: <NSInvocationOperation: 0x45d9ea0>
Change: {
kind = 1;
}
Context: 0x0'

我的一般代码如下:

operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(somemethod) object:nil];

[operation addObserver:self forKeyPath:@"isFinished" options:0 context:nil];

[operationQueue addOperation:operation];
[operation release];

- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if([keyPath isEqual:@"isFinished"] && operation == object)
{


[operation removeObserver:self forKeyPath:@"isFinished"];
[self performSelectorOnMainThread:@selector(newerPostLoadingNumberOfUdates) withObject:nil waitUntilDone:YES];

}


else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}

我想知道将请求的操作排队并相应执行它们的最佳实践是什么?

提前致谢。

最佳答案

当您提到使用多个队列时,如果没有看到更多代码,就很难回答这个问题。我认为有几点需要考虑:

1) 您拥有[操作发布],然后在 KVO 处理程序中将操作对象 进行比较。在完成操作之前,不应释放“操作”。在本例中的 KVO 处理程序中。

2) 如上所述,您应该使用 isEqualToString

进行字符串比较

3)听起来您正在尝试按顺序运行队列,以便一次只执行一个操作,并在第一个操作完成后对另一个操作进行排队。相反,您可以将队列设置为一次仅执行一项操作:

operationQueue.maxConcurrentOperationCount = 1;

然后一次添加所有操作。如果执行顺序很重要,您可以直接使用 Grand Central Dispatch 并使用 dispatch_sync 在队列上按特定顺序执行 block 。

关于iphone - 在 iPhone 上排队和处理多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616568/

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