Tableview未在我发布的时间内显示单元格

时间:2015-02-18 10:01:50

标签: ios parsing tableview

我创建了一个应用程序,可以从博客中获取信息并在应用程序中显示。在我获取数据后,它应该显示在表视图上。它显示了我发布的内容,但事情是按字母顺序排列的,而不是我发布内容的时间。

这是代码

@implementation EventsTableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

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

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

    [self searchForEvents];
}

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

- (void)searchForEvents
{
    [self.searchBar resignFirstResponder];


    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:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                [searchAlertView show];
                            }
                            else
                            {
                                NSString *resultString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                NSLog(@"Search results: %@", resultString);

                                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
                                {
                                    for(NSString *key in jsonDictionary.keyEnumerator)
                                    {
                                        NSLog(@"First level key: %@", key);
                                    }

                                    [self.firstLettersArray 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"];

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

                                        NSString *eventsFirstLetter = [event.eventName substringToIndex:1];
                                        NSMutableArray *eventsWithFirstLetter = [self.eventsDictionary objectForKey:eventsFirstLetter];

                                        if(!eventsWithFirstLetter)
                                        {
                                            eventsWithFirstLetter = [NSMutableArray array];
                                            [self.firstLettersArray addObject:eventsFirstLetter];
                                        }

                                        [eventsWithFirstLetter addObject:event];

                                        [self.eventsDictionary setObject:eventsWithFirstLetter forKey:eventsFirstLetter];

                                        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.firstLettersArray sortUsingSelector:@selector(compare:)];
                                    [self.tableView reloadData];
                                }
                            }
                        });
     }];

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

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

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.firstLettersArray.count;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSString *firstLetter = [self.firstLettersArray objectAtIndex:section];
    NSArray *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];

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

    cell.textLabel.text = event.eventName;
    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    /*
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = cell.textLabel.text;

    NSLog(@"Row selected %@",cellText);*/

    NSString *firstLetter = [self.firstLettersArray 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

2 个答案:

答案 0 :(得分:0)

您正尝试使用标准的排序:功能对包含事件对象的 firstLettersArray 进行排序,该功能不知道如何使用您的自定义对象。

您可以使用 sortedArrayUsingComparator:这样的功能:

[firstLettersArray sortedArrayUsingComparator:^NSComparisonResult(Events *obj1, Events *obj2) {
    // return object comparison result here
}];

编辑:您还需要在Events类中拥有NSDate属性,并在事件创建时感受它。我相信事件创建时间应该包含在eventsInfoDictionary中。最终,您将能够使用NSDate属性比较obj1和obj2。

答案 1 :(得分:0)

我认为这条线不起作用

[self.firstLettersArray sortUsingSelector:@selector(compare:)];

使用这行代码可能对你有帮助....

 sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];