Разработвам тестово приложение, в което имам NSOperationQueue. Създавам NSInvocationOperation и наблюдавам свойството "isFinished" на тази операция. Странно, наблюдениетоValueForKeyPath се извиква само понякога. Не мога да разбера промените, които трябва да направя, за да го извиквам всеки път. Моля помогнете.
Ето кода, който съм написал:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
........//initialization
queue = [NSOperationQueue new];
operation=[NSInvocationOperation new];
operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(CreateOperationWithContext:) object:context];
[operation addObserver:self forKeyPath:@"isFinished" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL];
[queue addOperation:operation];
..... // launch the view controller
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"isFinished"]) {
NSLog(@"came in");
[operation removeObserver:self forKeyPath:@"isFinished"];
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
CreateOperationWithContext
? - person Wain   schedule 12.08.2013isFinished
KVN? Например, ако не може да разреши@selector(CreateOperationWithContext:)
, тогава операцията никога няма да бъде създадена на първо място. Или, акоCreateOperationWithContext:
не успее да завърши (безкраен цикъл и т.н.), операцията също няма да завърши. Независимо от това бих препоръчал да зададетеcompletionBlock
за вашата операция, вместо да добавяте наблюдател за ключаisFinished
. Той е по-чист и по-надежден. - person Rob   schedule 12.08.2013