似乎我的问题不是任何人的问题,因为我有任何关于它的事情。 所以它可能不是一个大问题,但对我来说却是。
我的这个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'
任何人都可以向我解释这个错误意味着什么或者我做错了吗?!
答案 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
过滤器工作正常但后来我得到错误,我尝试发送更多然后一个字符串到新的视图我选择一行。
我感谢任何帮助