Cocoa 在另一个线程上执行提取请求
我想在后台线程上发出CoreData获取请求,以便用户可以选择取消它 下面是我的背景线程代码:Cocoa 在另一个线程上执行提取请求,cocoa,core-data,Cocoa,Core Data,我想在后台线程上发出CoreData获取请求,以便用户可以选择取消它 下面是我的背景线程代码: - (void)searchDailyNotes { NSEntityDescription *entity = [NSEntityDescription entityForName:@"DailyNotes" inManagedObjectContext:self.managedObjectContext]; NSString *se
- (void)searchDailyNotes
{
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"DailyNotes"
inManagedObjectContext:self.managedObjectContext];
NSString *searchString = [self.searchTextField stringValue];
NSFetchRequest *fetchRequest= [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate
predicateWithFormat:@"notes contains[cd] %@", searchString];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
[_dailyNotesArray addObjectsFromArray:
[self.managedObjectContext
executeFetchRequest:fetchRequest
error:&error]];
NSLog(@"dailynotesArray count: %lu", [_dailyNotesArray count]);
if(error){
[NSApp presentError:error];
}
[fetchRequest release];
}
问题:
- 如果用户想要取消搜索,那么终止后台线程的正确方法是什么
- 如果在
当前正在提取时中止线程,那么managedObjectContext
的分配会发生什么变化?我会上厕所吗fetchRequest
cancel
方法,但这只是一个建议。其思想是线程中的代码将定期检查此状态,如果已请求取消,则尽早退出。例如,您将在NSThread
和NSOperation
中看到这一点。如果代码未检查取消请求,则cancel
方法无效
因此,如果您想处理取消,您需要为取消请求添加支票。如果您看到请求取消,您可以在实际完成线程之前执行所需的任何清理。但是无论如何,您都不能中断正在进行的获取请求——一旦您调用了该方法来启动它,您将等待它完成
另一方面,您实际需要担心这种情况的回迁需要多长时间?Cocoa线程通常不包括强制线程中止的想法。您将看到一个
cancel
方法,但这只是一个建议。其思想是线程中的代码将定期检查此状态,如果已请求取消,则尽早退出。例如,您将在NSThread
和NSOperation
中看到这一点。如果代码未检查取消请求,则cancel
方法无效
因此,如果您想处理取消,您需要为取消请求添加支票。如果您看到请求取消,您可以在实际完成线程之前执行所需的任何清理。但是无论如何,您都不能中断正在进行的获取请求——一旦您调用了该方法来启动它,您将等待它完成
另一方面,您的回迁需要多长时间才能真正担心这种情况?您可能对本系列文章感兴趣:您可能对本系列文章感兴趣: