2012-04-02 3 views
1

내가 jQuery과 (tblFriends)에서 검색 창을 구현 있어요 "SearchBar에 검색 디스플레이 컨트롤러"검색 - NSInvalidArgumentException 오류

와이 (friendsList있는 NSArray와 동일) filteredFriendsList 사전의 내있는 NSArray입니다 :

테이블이 절반 만보기를 차지하기 때문에
  { 
     gender 
     id 
     name 
     picture 

}

나는 (안 tableViewController 단위)의 UIViewController의 테이블 뷰를 가지고있다. 인터페이스 :

#import <UIKit/UIKit.h> 
#import "ClasseSingleton.h" 
#import "FBConnect.h" 

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 
{ 

    NSArray *friendsList; 
    NSDictionary *friendsDict; 

    NSMutableArray *filteredFriendsList; 

    IBOutlet UITableView *tblFriends; 

} 

@property (nonatomic, retain) NSArray *friendsList; 
@property (nonatomic, retain) NSMutableArray *filteredFriendsList; 

-(void)getFriends; 


@end 

이행

#import "ViewController.h" 

@implementation ViewController 

@synthesize friendsList, filteredFriendsList; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    [tblFriends setDelegate:self]; 
    [tblFriends setDataSource:self]; 


} 

- (void)getFriends{ 

    NSLog(@"ENTRATO - getFriends"); 

    //Copy ARRAY in other ARRAY 
    friendsList = [NSArray arrayWithArray:[ClasseSingleton getFriends]]; 

    filteredFriendsList = [NSArray arrayWithArray:[ClasseSingleton getFriends]]; 


    NSLog(@"getFriends : DESCRIPTION\n\n %@", [friendsList description]); 
    NSLog(@"Count friendslist: %i", [friendsList count]); 

    [tblFriends reloadData]; 

} 


//     *****TABLE MANAGEMENT*****     // 


//Nuber of cells 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    NSLog(@"tabella1"); 
    return [filteredFriendsList count]; 


} 

//Populate the table 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPat{ 

    static NSString * cellIdentifier = @"cell"; 

    //Set Style cell 
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil){ 

     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 

    } 

    friendsDict = [filteredFriendsList objectAtIndex:indexPat.row]; 


    //Set CELL TEXT 
    NSString *cellValue = [friendsDict objectForKey:@"name"]; 

    NSLog(@"TBL %@", cellValue); 
    [cell.textLabel setText:cellValue]; 
    return cell; 

} 

//       SEARCH IN TABLE 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{ 
    [self filterContentForSearchText:searchString scope: 
    [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 

    // Return YES to cause the search result table view to be reloaded. 
    return YES; 
} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption{ 

    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope: 
    [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]]; 

    // Return YES to cause the search result table view to be reloaded. 
    return YES; 
} 

- (void)searchBarCancelButtonClicked:(UISearchBar *)saearchBar { 
    [self.filteredFriendsList removeAllObjects]; 
    [self.filteredFriendsList addObjectsFromArray: friendsList]; 
} 


- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope{ 

    /* 
    Update the filtered array based on the search text and scope. 
    */ 
    [self.filteredFriendsList removeAllObjects]; // First clear the filtered array. 

    /* 
    Search the main list for products whose type matches the scope (if selected) and whose name matches searchText; add items that match to the filtered array. 
    */ 
    NSString *cellTitle; 
    for (cellTitle in friendsList){ 
    // for (cellTitle in [friendsDict objectForKey:@"name"]){  
     NSComparisonResult result = [cellTitle compare:searchText options:NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])]; 
     if (result == NSOrderedSame){ 
      [filteredFriendsList addObject:cellTitle]; 
     } 
    } 
} 

... 

@end 

매번 내가이 오류와 응용 프로그램 충돌 바 검색에서 일부 문자를 넣어 :

'NSInvalidArgumentException'을

코드입니다 , 이유 : '- [__ NSCFDictionary compare : options : range :] : 인스턴스로 전송 된 인식 할 수없는 선택자

문제를 해결하기를 바랍니다.이 오류는 6 일째입니다.

감사합니다. 당신은 filteredFriendsList를 선언

답변

4

NSMutableArray이 될 수 있습니다,하지만 당신은 여기에 immuatble NSArray를 할당하고이에

filteredFriendsList = [NSArray arrayWithArray:[ClasseSingleton getFriends]]; 

변경을 :

filteredFriendsList = [NSMutableArray arrayWithArray:[ClasseSingleton getFriends]]; 
+0

또는'[[ClasseSingleton getFriends] mutableCopy ] ' – warrenm

+0

:(새로운 오류가 발생했습니다 :'NSInvalidArgumentException ', 이유 :'- [__ NSCFDictionary compare : options : range :] : – Byteros

+0

이것은 전체 오류가 아님 – yuji

관련 문제