0
在我的NSOperation的子類後,我設置4個標誌,並且當操作完成它的執行不會被刪除到的NSOperation隊列,它是在開始時加入,這件事情的原因在我的應用程序中有很多問題。 我想,我設置這些標誌的方式是不正確的,請你幫忙吧。因爲我真的花了很多時間來確定這個問題。對象不從NSOperationQueue刪除執行
@property(assign, nonatomic) BOOL isCancelled;
@property(nonatomic, getter=isExecuting) BOOL executing;
@property(nonatomic, getter=isFinished) BOOL finished;
@property(readonly, getter=isAsynchronous) BOOL asynchronous;
//in initialisation
- (id)initWithURL:(NSURL*)url andRaw:(NSInteger)row
{
if (![super init])
return nil;
[self setTargetURL:url];
return self;
}
//the way I override KVO
- (BOOL)isExecuting
{
NSLog(@"Exec");
return (self.defaultSession != nil);//it doesn't work
}
- (BOOL)isFinished
{
NSLog(@"Finished");
return (self.defaultSession == nil); //it doesn't work, so I explicitly set the value
}
- (BOOL)isAsynchronous
{
return YES;
}
- (void)cancel
{
[super cancel];
[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
self.isExecuting = NO;
self.isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
[self didChangeValueForKey:@"isExecuting"];
if(self.downloadTask.state == NSURLSessionTaskStateRunning)
[self.downloadTask cancel];
[self finish];
}
- (void)finish
{
[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
self.defaultSession = nil; //NSURLSession
self.isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
[self didChangeValueForKey:@"isExecuting"];
}
預先感謝您
編輯: 終於讓我找到了問題 - 這是NSURLSession隊列中。它保持對隊列的強烈引用,並且不允許將它從NSOperationQueue中解除分配和刪除。
謝謝,我會盡量按照你的指示,不幸的是我不是Ray Wenderlich的用戶(。 – Melany
我強烈建議成爲一個,如果可以的話,他們有一些很棒的教程。 .raywenderlich.com /視頻教程 – shrutim
OK也許我會,如果管理這個問題) – Melany