2010-10-13 2 views
0

кажется, что моя проблема не проблема для кого-то из eles, потому что я ничего не знаю об этом. , так что, возможно, это не такая большая проблема, но для меня это так.Поиск NSMutableArray с помощью String и возврат всего сравниваемого массива

У меня есть этот MutableArray, заполненный большим количеством данных из файла XML. -Name -Age -Dress Поиск идет по имени, и фильтрация работает довольно хорошо.

то, что я делаю, это поиск массива с помощью rangeOfString, но который возвращает только String (-Name), а не массив с его содержимым, таким как исходный массив, потому что теперь его только строка.

может кто-нибудь сказать мне, как я выполняю эту

Это мой поиск до сих пор

if ([[self searcher] length] != 0) 
{ 
    for (NSString *currentString in [self listOfContent]) 
    { 
     if ([currentString rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound) 
     { 
      [[self filteredListOfContent] addObject:currentString]; 
     } 

поисковое является строка в SearchBar. или есть ли какой-либо другой более эффективный способ или можно найти любую ценность в MutipleArry?!?

Любые идеи и предложения приветствуются

Я изменил код этого

NSString *searchText = searchBar.text; 
NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

for (NSDictionary *dictionary in listOfContent) 
{ 
    //NSArray *array = [dictionary objectForKey:LNAME]; 
    [searchArray addObject:dictionary]; 

} 

for (NSString *sTemp in searchArray) 
{ 
    NSLog(@"array %@", searchArray); 

    if ([sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch].location != NSNotFound) 

     [filteredListOfContent addObject:searchArray]; 
} 

журнал показывает, что фильтр работает, но я получаю эту ошибку

2010-10-22 16:18:09.708 TableView[6114:207] -[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x5c3f540 
2010-10-22 16:18:09.712 TableView[6114:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x5c3f540' 

может кто-нибудь скажите мне, в чем проблема

И все еще не найдено ни одного решения I изменил код для этого:

NSMutableArray *searchArray = [[NSMutableArray alloc] init]; 

     for (NSDictionary *dictionary in contentsList) 
     { 
      NSArray *array = [dictionary allValues]; 
      [searchArray addObjectsFromArray:array]; 
     } 
     for (NSDictionary *dict in searchArray) 
     { 
      if ([[dict valueForKey:@"NAME"] rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound) { 
       NSLog(@"Filter %@", dict); 
       [searchResults addObject:dict]; 
      } 

Теперь у меня есть массив значений, но все еще получаю ошибку

2010-10-28 16:23:46.124 TableViews[8373:207] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x5a5eb00' 

может кто-нибудь объяснить мне WAHT TAHT этой ошибки означает или WAHT я сделал не так?!?

+0

Как вы анализируете XML в свой массив строк? – JeremyP

+0

через NSXMLParser – zim

+0

Без дополнительной информации о структуре массива, XML, который используется для сборки массива, и как вы превращаете этот XML в массив, будет очень сложно дать вам полезные советы. –

ответ

0
2010-10-28 16:23:46.124 TableViews[8373:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x5a5eb00' 

Эта ошибка означает, что вы лечила NSString, как если бы это было NSDictionary, отправив сообщение -objectForKey: к нему.

0

Эй Джереми мой XML-анализатор выглядит следующим образом

- (void)parseXMLFileAtURL:(NSString *)URL 
{ 
listOfContent = [[NSMutableArray alloc] init]; 

    NSURL *xmlURL = [NSURL URLWithString:URL]; 

    rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [rssParser setDelegate:self]; 
    [rssParser setShouldProcessNamespaces:NO]; 
    [rssParser setShouldReportNamespacePrefixes:NO]; 
    [rssParser setShouldResolveExternalEntities:NO]; 
    [rssParser parse]; 

} 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { 
NSString * errorString = [NSString stringWithFormat:@"Unable to download feed from web site (Error code %i)", [parseError code]]; 

UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[errorAlert show]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    

currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"ENTITY"]) { 
    item = [[NSMutableDictionary alloc] init]; 
    currentDATE = [[NSMutableString alloc] init]; 
    currentLASTNAME = [[NSMutableString alloc] init]; 
    currentFIRSTNAME = [[NSMutableString alloc] init]; 
} 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{  
if ([elementName isEqualToString:@"ENTITY"]) { 
    [item setObject:currentLASTNAME forKey:@"LASTNAME"]; 
    [item setObject:currentFIRSTNAME forKey:@"FIRSTNAME"]; 
    [item setObject:currentDATE forKey:@"DATE"]; 

    [listOfContent addObject:[item copy]]; 

} 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
if ([currentElement isEqualToString:@"LASTNAME"]) { 
    [currentLASTNAME appendString:string]; 
} else if ([currentElement isEqualToString:@"FIRSTNAME"]) { 
    [currentFIRSTNAME appendString:string]; 
} else if ([currentElement isEqualToString:@"DATE"]) { 
    [currentDATE appendString:string]; 
} 

} 

и файл XML является стандартному как этого

<All> 
    <ENTITY> 
     <Lastname>A</Lastname> 
     <Firstname>B</Firstname> 
     <Date>25</Date> 
    </ENTITY> 
    ... 
</All> 

только мации его разобранный файл XML правильно показан в таблице до Я начинаю типе в поисковом поле.

, когда я заменяю

[dict objectForKey:LNAME] //LNAME is defined for Lastname 

с

searchText 

фильтр работает нормально, но я получаю сообщение об ошибке, что я пытаюсь отправить более строку в новом View Венна я выбираю строку ,

Я благодарен за любую помощь