2010-10-13 196 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 

過濾器工作正常,但後來我得到一些嘗試更多然後一個字符串發送到新的視圖德恩我選擇一行的錯誤。

我很感謝任何幫助

相關問題