これは私の検索機能です:
- (void)searchingMethod:(NSString *)aText{
NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Entity" inManagedObjectContext:context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate
predicateWithFormat:@"word LIKE %@",
[searchBar.text lowercaseString]];
[fetchRequest setPredicate:predicate];
//fetching array
NSLog(@"Place 1");
NSArray *wordArray = [context
executeFetchRequest:fetchRequest
error:nil];
NSLog(@"Place 2");
[self performSelectorOnMainThread:@selector(refreshTableView:)
withObject:wordArray waitUntilDone:NO];
NSLog(@"Searching End");
}
そして、次のメソッドで検索関数を呼び出します。
- (void)searchBar:(UISearchBar *) searchBar textDidChange:(NSString *)Tosearch{
if([[searchBar text] length] >0)
{
NSThread *aThread = [[NSThread alloc]
initWithTarget:self
selector:@selector(searchingMethod:)
object:searchBar.text];
[aThread start];
}
else
{
//others...
}
return;
}
通常、このような結果が得られます:</p>
2012-07-05 00:04:46.706 MyApp[2376:207] Place 1
2012-07-05 00:04:46.783 MyApp[2376:207] Place 2
2012-07-05 00:04:46.823 MyApp[2376:207] searching End
検索方法を十数回行った後、この位置で停止します。
2012-07-05 00:11:42.174 MyApp[2376:207] Place 1
数回検索を続けると、正常に戻りました。そしてまた奇妙に... それは私を当惑させます。
さまざまなマルチスレッド方法を試すために何日も費やしましたが、結果は同じです。
私を助けてください!ありがとうございました!