2015-03-17 2 views
0

У меня есть строка и каждый раз, когда строка изменится. Мне нужен код, чтобы он извлекал URL из HTML. И если есть некоторый текст, я хочу, чтобы сохранить текст в одной строке и URL в другой строкеИзвлечь URL из HTML и сохранить текст, если есть

Пример

string = <div class=\"separator\" style=\"clear: both; text-align: center;\">\n<a href=\"http://4.bp.blogspot.com/-K7vl-ShXrNc/VQU-D0NTFgI/AAAAAAAAAOg/aBIUOwF2nEQ/s1600/contact.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" src=\"http://4.bp.blogspot.com/-K7vl-ShXrNc/VQU-D0NTFgI/AAAAAAAAAOg/aBIUOwF2nEQ/s1600/contact.png\" /></a></div>\n<br /> 

извлеченный URL = http://4.bp.blogspot.com/-K7vl-ShXrNc/VQU-D0NTFgI/AAAAAAAAAOg/aBIUOwF2nEQ/s1600/contact.png

Как бы я сделать это в Xcode

Edit: Мой код

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.eventNamesArray = [NSMutableArray array]; 
    self.eventsDictionary = [NSMutableDictionary dictionary]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self searchForEvents]; 
} 

//Json Parsing 
- (void)searchForEvents 
{ 

    NSString *eventsSearchUrlString = [NSString stringWithFormat:@"https://www.googleapis.com/blogger/v3/blogs/1562818803553764290/posts?key=AIzaSyBTOxz-vPHgzIkw9k88hDKd99ILTaXTt0Y"]; 
    NSURL *eventsSearchUrl = [NSURL URLWithString:eventsSearchUrlString]; 
    NSURLRequest *eventsSearchUrlRequest = [NSURLRequest requestWithURL:eventsSearchUrl]; 

    NSURLSession *sharedUrlSession = [NSURLSession sharedSession]; 
    NSURLSessionDataTask *searchEventsTask = 
    [sharedUrlSession dataTaskWithRequest:eventsSearchUrlRequest completionHandler: 
    ^(NSData *data, NSURLResponse *response, NSError *error) 
    { 
     dispatch_async(dispatch_get_main_queue(), 
         ^{ 
          [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

          if(error) 
          { 
           UIAlertView *searchAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please check your internet connection" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
           [searchAlertView show]; 
          } 
          else 
          { 
           NSError *jsonParseError = nil; 
           NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParseError]; 

           if(jsonParseError) 
           { 
            UIAlertView *jsonParseErrorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:jsonParseError.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
            [jsonParseErrorAlert show]; 
           } 
           else 
           { 
            [self.eventNamesArray removeAllObjects]; 
            [self.eventsDictionary removeAllObjects]; 

            NSArray *searchResultsArray = [jsonDictionary objectForKey:@"items"]; 
            NSLog(@"test%@",searchResultsArray); 


            for(NSDictionary *eventsInfoDictionary in searchResultsArray) 
            { 
             Events *event = [[Events alloc] init]; 
             event.eventName = [eventsInfoDictionary objectForKey:@"title"]; 
             event.eventDescription =[eventsInfoDictionary objectForKey:@"content"]; 
             stringWithURL = [eventsInfoDictionary objectForKey:@"content"]; 

             NSString *eventsAsStrings = [event.eventName substringToIndex:event.eventName.length]; 
             NSMutableArray *eventsInArray = [self.eventsDictionary objectForKey:eventsAsStrings]; 

             if(!eventsInArray) 
             { 
              eventsInArray = [NSMutableArray array]; 
              [self.eventNamesArray addObject:eventsAsStrings]; 
             } 

             [eventsInArray addObject:event]; 

             [self.eventsDictionary setObject:eventsInArray forKey:eventsAsStrings]; 

             if ([event.eventDescription containsString:@"<br />"]) { 
              NSString* eventDescrip = event.eventDescription; 
              NSString* stringWithoutHTMLtags = [eventDescrip stringByReplacingOccurrencesOfString:@"<br />" withString:@""]; 
              event.eventDescription = stringWithoutHTMLtags; 
             } 

             } 
             NSLog(@"Event Name : %@", event.eventName); 
             NSLog(@"Event Description : %@", event.eventDescription); 

            } 

            [self.eventNamesArray sortedArrayUsingComparator:^NSComparisonResult(Events *obj1, Events *obj2) { 
             Events *time1 = obj1; 
             Events *time2 = obj2; 
             if (time1 > time2) { 
              return (NSComparisonResult)NSOrderedDescending; 
             } 
             else if (time1 < time2) { 
              return (NSComparisonResult)NSOrderedAscending; 
             } 
             return (NSComparisonResult)NSOrderedSame; 
            }]; 
            [self.tableView reloadData]; 

           } 
          } 
         }); 
    }]; 

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [searchEventsTask resume]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
    if (searchText.length == 0) { 
     isFiltered = NO; 
    } 
    else { 
     isFiltered = YES; 
    } 
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@",searchText]; 
    self.filteredEventsArray = [eventNamesArray filteredArrayUsingPredicate:pred]; 
    [self.tableView reloadData]; 
} 

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    [searchBar resignFirstResponder]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    if (isFiltered == YES) { 
     return filteredEventsArray.count; 
    } 
    else { 
     return self.eventNamesArray.count; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSArray *eventsWithFirstLetter; 
    if (isFiltered == YES) { 
     NSString *firstLetter = [self.filteredEventsArray objectAtIndex:section]; 
     eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter]; 
     return eventsWithFirstLetter.count; 
    } 
    else { 
     NSString *firstLetter = [self.eventNamesArray objectAtIndex:section]; 
     eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter]; 
     return eventsWithFirstLetter.count; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"eventTitleCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    Events *event; 
    if (isFiltered == YES) { 
     NSString *firstLetter = [self.filteredEventsArray objectAtIndex:indexPath.section]; 
     NSArray *eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter]; 
     event = [eventsWithFirstLetter objectAtIndex:indexPath.row]; 
     cell.textLabel.text = event.eventName; 
    } 
    else { 
     NSString *firstLetter = [self.eventNamesArray objectAtIndex:indexPath.section]; 
     NSArray *eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter]; 
     event = [eventsWithFirstLetter objectAtIndex:indexPath.row]; 
     cell.textLabel.text = event.eventName; 
    } 
    return cell; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSString *firstLetter = [self.eventNamesArray objectAtIndex:indexPath.section]; 
    NSArray *eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter]; 
    Events *event = [eventsWithFirstLetter objectAtIndex:indexPath.row]; 

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 
    DescriptionViewController *descriptionViewController = (DescriptionViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"descriptionController"]; 
    descriptionViewController.eventNameDesc = event.eventDescription; 
    descriptionViewController.navigationItem.title = event.eventName; 

    [self.navigationController pushViewController:descriptionViewController animated:YES]; 

} 



@end 

ответ

1

Вы может сделать это, как:

NSError *error = nil; 
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink 
                  error:&error]; 

[detector enumerateMatchesInString:someString 
          options:0 
          range:NSMakeRange(0, someString.length) 
         usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) 
{ 
    if (result.resultType == NSTextCheckingTypeLink) 
    { 
     NSString *str = [NSString stringWithFormat:@"%@",result.URL]; 
     NSLOG(%@,str); 

    } 
}]; 

Надеется, что это помогает ..... :)

+0

это работает благодаря за помощь –

+0

но как бы я извлечь текст, если есть один –

+0

Если «если» условие не получается, получите текст там .... –

Смежные вопросы