使用String搜索NSMutableArray并返回整个比较的Array

时间:2010-10-13 11:11:09

标签: iphone objective-c cocoa-touch nsmutabledata

似乎我的问题不是任何人的问题,因为我有任何关于它的事情。 所以它可能不是一个大问题,但对我来说却是。

我的这个MutableArray充满了来自XML文件的大量数据。 -Name -Age -Address 搜索名称,到目前为止过滤效果非常好。

我所做的是使用rangeOfString搜索数组但是只返回String(-Name)而不返回Array,其内容与原始Array一样,因为它现在只是一个字符串。

任何人都可以告诉我如何完成这个

到目前为止,这是我的搜索

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

searcher是SearchBar中的String。 或者是否有其他更有效的方式或是否可以在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'

任何人都可以向我解释这个错误意味着什么或者我做错了吗?!

2 个答案:

答案 0 :(得分: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:

答案 1 :(得分:0)

嘿Jeremy我的xml-parser看起来像这样

- (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文件在表格中正确显示,直到我开始在搜索域中进行tipeing。

当我替换

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

searchText

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

我感谢任何帮助