我的应用程序中的搜索工具出现问题,我注意到这里的一些帖子说我的代码的for循环有问题,你可以在上面的链接中看到以前的帖子
Iphone Programming XML Parser NSMutableArray
这是来自另一个有相同问题的人的评论,我只想知道我的项目问题是否相同,“搜索数组中的对象是NSArray对象,这意味着他们没有响应选择器rangeOfString:因为这是一个NSString方法“如果可以,我可以使用像这样的解决方案。
for(NSArray *array in searchArray)
{
// NSString *str = [array objectAtIndex:0];
PatientInfoObject *obj = [array objectAtIndex:0];
NSString *str = obj.id;
// to be sure
if( [str isKindOfClass:[NSString class]] )
{
NSRange titleResultsRange = [str rangeOfString:searchText options:NSCaseInsensitiveCompare];
if( titleResultsRange.length != 0 )
{
[copyListOfItems addObject:str];
}
}
else
{
// this shouldn't have happened, log something to console
NSLog(@"**Object in array is not of type NSString**");
}
}
以下是我的UISearchBar的代码,如上所述,问题开头的链接是大多数相关代码,如果你还需要我发布的其他代码。
由于 布拉德
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchtext {
if ([searchtext length] == 0) {
[self toggleToolBarButtons:NO];
[[self rssParser]startProcess];
}
else {
for (NSString * string in _rssParser.rssItems) {
NSRange r = [string rangeOfString:searchtext options:NSCaseInsensitiveSearch];
if (r.location != NSNotFound) {
[_rssParser.rssItems addObject:string];
}
}
}
[[self tableView]reloadData];
}
答案 0 :(得分:0)
for (NSString * string in _rssParser.rssItems) {
此代码假定rssItems数组中的对象是NSStrings。从另一篇文章来看,它们似乎是BlogRss的实例。
也许你需要这样的东西:
NSString *matchingStringToAdd=nil;
for ( BlogRss * blogRss in _rssParser.rssItems ) {
NSString *string = blogRss.title; // or whatever member you're seaching on
NSRange titleResultsRange = [string rangeOfString:searchText
options:NSCaseInsensitiveCompare];
if ( titleResultsRange.location != NSNotFound ) {
matchingStringToAdd = string;
break;
}
}
if ( matchingStringToAdd ) {
[rssParser.rssItems addObject:matchingStringToAdd);
}
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if ([searchText length] == 0) {
//[self toggleToolBarButtons:NO];
//[[self rssParser]startProcess];
[displayitems removeAllObjects];
[displayitems addObjectsFromArray:_rssParser.rssItems];
} else {
for ( BlogRss * blogRss in _rssParser.rssItems) {
NSString *string = blogRss.title;
NSRange r = [string rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (r.location != NSNotFound) {
[displayitems addObject:blogRss];
}
}
}
[[self tableView]reloadData];
}
rssfunviewcontroller.h
@interface RssFunViewController : UIViewController <UITableViewDataSource,UITableViewDelegate,BlogRssParserDelegate,UISearchBarDelegate> {
BlogRssParser * _rssParser;
UITableView * _tableView;
IBOutlet UISearchBar * searchbar;
RssFunAppDelegate * _appDelegate;
UIToolbar * _toolbar;
NSMutableArray * displayitems;
}
的cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"rssItemCell"];
if(nil == cell){
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"rssItemCell"]autorelease];
}
cell.textLabel.text = [[displayitems objectAtIndex:indexPath.row]title];
cell.detailTextLabel.text = [[displayitems objectAtIndex:indexPath.row]description];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
viewDidLoad中
- (void)viewDidLoad {
[super viewDidLoad];
[self toolbarInit];
_rssParser = [[BlogRssParser alloc]init];
self.rssParser.delegate = self;
[[self rssParser]startProcess];
displayitems = _rssParser.rssItems;
}