2010-10-13 73 views
0

看来我的问题对于任何人来说都不是问题,因为我已经发现了任何东西。 所以它可能不是一个很大的问题,但对我来说它是。用一个字符串搜索一个NSMutableArray并返回整个比较数组

我有这个MutableArray充满了来自XML文件的大量数据。 -Name -Age -Address 该搜索适用于名称,并且过滤工作到目前为止工作得非常好。

我做的是搜索与rangeOfString的数组,但只返回字符串(-Name),而不是阵列与它的像原来的数组,因为它只是一个字符串的内容了。

谁能告诉我我怎么做到这一点

这是我搜索到目前为止

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

搜索在搜索栏的字符串。 还是有其他更有效的方法,或者有可能在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' 

能任何人告诉我什么是问题

仍然没有解决方案发现我改变了代码这样:

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' 

任何人都可以解释我啥子taht的错误意味着或啥子我做错了什么?!?

+0

你如何解析XML到你的字符串数组? – JeremyP 2010-10-13 13:47:05

+0

via NSXMLParser – zim 2010-10-13 14:07:13

+0

如果没有关于数组结构的更多信息,用于构建数组的XML以及如何将该XML转换为数组,将很难给出任何有用的建议。 – 2010-10-28 15:59:22

回答

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,如果它通过发送消息-objectForKey:到它是一个NSDictionary

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> 

只是mation它解析XML文件在表中,直到正确显示我开始在搜索字段中搜索。

当我更换

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

searchText 

过滤器工作正常,但后来我得到一些尝试更多然后一个字符串发送到新的视图德恩我选择一行的错误。

我很感谢任何帮助

相关问题