2016-08-09 16 views
0

enter image description hereここでは、検索バーを使用するために必要なものすべてを実装していますが、アプリで何が問題になるのかわかりません。私は検索バーに何かを入力し始めるとクラッシュします。どんな助けもありがとうございます。検索バーに文字を入力するとアプリケーションがクラッシュする

エラー:

'Can't use in/contains operator with collection <NSManagedObject: 0x7fa1c24d32a0> (entity: Personal; id: 0xd0000000000c0000 <x-coredata://2C964E4A-A8CD-465B-BB23-0121B7C7EEFB/Personal/p3> ; data: { 

attribute = Ios; 
name = man; 
}) (not a collection)' 

*** First throw call stack: 
(
    0 CoreFoundation      0x0000000104ed5e65 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x00000001045c2deb objc_exception_throw + 48 
    2 Foundation       0x00000001041db6b1 -[NSCompoundPredicate evaluateWithObject:substitutionVariables:] + 0 
    3 Foundation       0x00000001041b2719 -[NSPredicateOperator performOperationUsingObject:andObject:] + 286 
    4 Foundation       0x00000001041b1e3c -[NSComparisonPredicate evaluateWithObject:substitutionVariables:] + 313 
    5 Foundation       0x00000001041b1c94 _filterObjectsUsingPredicate + 398 
    6 Foundation       0x00000001041b1a84 -[NSArray(NSPredicateSupport) filteredArrayUsingPredicate:] + 279 
    7 Personal Data      0x00000001040ba6a2 -[ViewDetailViewController updateSearchResultsForSearchController:] + 514 
    8 UIKit        0x0000000105cb2185 -[UISearchController _searchBar:textDidChange:] + 102 
    9 UIKit        0x0000000105675d47 -[UISearchBar(UISearchBarStatic) _searchFieldEditingChanged] + 360 
    10 UIKit        0x0000000105285194 -[UIApplication sendAction:to:from:forEvent:] + 92 
    11 UIKit        0x00000001053f46fc -[UIControl sendAction:to:forEvent:] + 67 
    12 UIKit        0x00000001053f49c8 -[UIControl _sendActionsForEvents:withEvent:] + 311 
    13 UIKit        0x0000000105c68a85 -[UITextField fieldEditorDidChange:] + 206 
    14 UIKit        0x0000000105c73cb7 -[UITextInputController _sendDelegateChangeNotificationsForText:selection:] + 138 
    15 UIKit        0x0000000105c76281 -[UITextInputController _insertText:fromKeyboard:] + 893 
    16 UIKit        0x0000000105c76bcd -[UITextInputController insertText:] + 365 
    17 UIKit        0x0000000105400728 -[UIFieldEditor insertFilteredText:] + 800 
    18 UIKit        0x0000000105c6d7d7 -[UITextField insertFilteredText:] + 103 
    19 UIKit        0x000000010552ba83 -[UIKeyboardImpl insertText:] + 125 
    20 UIKit        0x0000000105528278 -[UIKeyboardImpl performKeyboardOutput:] + 496 
    21 UIKit        0x0000000105527e65 __55-[UIKeyboardImpl handleKeyboardInput:executionContext:]_block_invoke_2 + 164 
    22 UIKit        0x0000000105c96724 -[UIKeyboardTaskQueue continueExecutionOnMainThread] + 332 
    23 Foundation       0x00000001041aa067 __NSThreadPerformPerform + 283 
    24 CoreFoundation      0x0000000104e01a31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    25 CoreFoundation      0x0000000104df795c __CFRunLoopDoSources0 + 556 
    26 CoreFoundation      0x0000000104df6e13 __CFRunLoopRun + 867 
    27 CoreFoundation      0x0000000104df6828 CFRunLoopRunSpecific + 488 
    28 GraphicsServices     0x00000001086f0ad2 GSEventRunModal + 161 
    29 UIKit        0x0000000105283610 UIApplicationMain + 171 
    30 Personal Data      0x00000001040bbd9f main + 111 
    31 libdyld.dylib      0x000000010762992d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 



#import "ViewDetailViewController.h" 
    #import <CoreData/CoreData.h> 

    @interface ViewDetailViewController() <UITableViewDelegate,UITableViewDataSource> 

     { 
     NSMutableArray *_park; 
     } 

     @property (nonatomic, strong) NSMutableArray *searchResult; 

     @end 

     @implementation ViewDetailViewController 

    - (NSManagedObjectContext *)managedObjectContext 
    { 
    NSManagedObjectContext *context = nil; 
    id delegate = [[UIApplication sharedApplication] delegate]; 
    if ([delegate performSelector:@selector(managedObjectContext)]) { 
     context = [delegate managedObjectContext]; 
    } 
    return context; 
    } 

     - (void)viewDidAppear:(BOOL)animated 
    { 
    [super viewDidAppear:animated]; 

    // Fetch the devices from persistent data store 
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Personal"]; 
    self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; 

検索バー宣言

[self.tableView reloadData]; 

    // self.searchResult = [NSMutableArray arrayWithCapacity:  [self.devices count]]; 

    searchResultsArray = [[NSArray alloc]init]; 

    self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; 
    self.searchController.searchBar.delegate = self; 
    self.searchController.searchResultsUpdater = self; 
    [self.searchController.searchBar sizeToFit]; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 
    self.definesPresentationContext = YES; 
    self.tableView.tableHeaderView = self.searchController.searchBar; 


    // Do any additional setup after loading the view. 
     } 

     -(void)updateSearchResultsForSearchController:(UISearchController *)searchController{ 

    NSString *searchString = self.searchController.searchBar.text; 
    if (searchString.length > 0) 
     { 
     NSPredicate *resultPredicate; 
     NSInteger scope = self.searchController.searchBar.selectedScopeButtonIndex; 

     if(scope == 0){ 
      resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchString]; 
     }else{ 
      resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchString]; 
     } 

     NSArray * filterArray = [self.devices filteredArrayUsingPredicate:resultPredicate]; 

     _park = [[NSMutableArray alloc] init]; 

     [_park addObject:filterArray]; 


     } 
    else{ 

     //_park = (NSMutableArray *)shortedArray; 
     } 
    [self.tableView reloadData]; 

    } 


      - (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{ 

    [self updateSearchResultsForSearchController:self.searchController]; 

     } 

テーブルビューのデリゲートメソッド

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 

    return 1; 
     } 

      - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
     { 

     return [self.devices count]; 

     } 

     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
     { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

     // Configure the cell... 
    NSManagedObject *device = [self.devices objectAtIndex:indexPath.row]; 


     // cell.textLabel.text = [self.searchResult objectAtIndex:indexPath.row]; 

      [cell.textLabel setText:[NSString stringWithFormat:@"%@", [device valueForKey:@"name"]]]; 

     [cell.detailTextLabel setText:[device valueForKey:@"attribute"]]; 

     return cell; 
     } 

     } 
+0

スタックトレースを表示します。 – Droppy

+0

私はそれを上記を参照して追加しました。エラー – virat

+1

これはスタックトレースではありません。 – Droppy

答えて

1

はこれを試してみてください、使用はSELFと属性名。私は、オブジェクトが属性名とその他のタイプのPersonalであると仮定しています。

NSPredicate *resultPredicate; 
NSInteger scope = self.searchController.searchBar.selectedScopeButtonIndex; 

if(scope == 0){ 
    resultPredicate = [NSPredicate predicateWithFormat:@"(SELF.name contains[cd] %@) OR (SELF.other CONTAINS[cd] %@)",searchString, searchString]; 
}else{ 
    resultPredicate = [NSPredicate predicateWithFormat:@"SELF.name contains[cd] %@",searchString]; 
} 

NSArray * filterArray = [self.devices filteredArrayUsingPredicate:resultPredicate]; 

_park = [[NSMutableArray alloc] init]; 

[_park addObject:filterArray]; 
+0

私はこれを使用しましたが、何か文字を入力しても何も起こっていません、検索コントローラを表示していません。 – virat

+0

私は正しく実装しました – virat

+0

あなたはこのようにtableViewの行数を指定する方法の1つを更新してください searchController.active && searchController.searchBar.text!= "" { return park.count } –

関連する問題