Parse Pagination Not Working

冷暖自知 提交于 2019-12-24 20:04:16

问题


In my app, I use Parse. I have it set up like this:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {

        // The className to query on
        self.parseClassName = @"Prayers";

        // Whether the built-in pull-to-refresh is enabled
        self.pullToRefreshEnabled = YES;

        // Whether the built-in pagination is enabled
        self.paginationEnabled = YES;

        // The number of objects to show per page
        self.objectsPerPage = 20;

    }
    return self;
}
- (PFQuery *)queryForTable {
    PFQuery *query = [PFQuery queryWithClassName:@"Prayers"];

    // If no objects are loaded in memory, we look to the cache first to fill the table
    // and then subsequently do a query against the network.
    if (self.objects.count == 0) {
        query.cachePolicy = kPFCachePolicyCacheThenNetwork;
    }

    [query orderByDescending:@"createdAt"];

    return query;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
                        object:(PFObject *)object
{
    static NSString *CellIdentifier = @"Cell";

    Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[Cell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    self.theObject = object;
    BOOL anony = [object[@"Anonymous"] boolValue];

    if (!anony) {
               NSString *names = [[object[@"FirstName"] stringByAppendingString:@" "] stringByAppendingString:object[@"LastName"]];
        cell.profileName.text = names;
        cell.contentLabel.text = object[@"Request"];
        cell.firstName = object[@"FirstName"];
        cell.lastName = object[@"LastName"];
        cell.iostoken = object[@"DeviceID"];
        cell.request = names;
        cell.prayerObject = object;
        PFFile *thumbnail = object[@"ProfilePic"];
        cell.profilePic.image = [UIImage imageNamed:@"AppIcon60x60@2x.png"];
        /*[cell.commentButton addTarget:self action:@selector(didTapCommentButtonAction:) forControlEvents:UIControlEventTouchUpInside];
         [cell.commentButton setTitle:@"Share" forState:UIControlStateNormal];
         [cell.commentButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
         [cell.commentButton setTitleColor:[UIColor greenColor] forState:UIControlStateHighlighted];*/
        [thumbnail getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {

            UIImage *thumbnailImage = [UIImage imageWithData:imageData];
            UIImageView *thumbnailImageView = [[UIImageView alloc] initWithImage:thumbnailImage];

            cell.profilePic.image = thumbnailImage;

        }];
        NSString *dates = object[@"dateMade"];
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"MMM_dd_yyyy"];
        NSDate *datefromstring = [formatter dateFromString:dates];
        NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
        [formatter2 setDateFormat:@"MMM dd, yyyy"];
        cell.dateLabel.text = [formatter2 stringFromDate:datefromstring];
        UIFont *cellFont = [UIFont fontWithName:@"Verdana-Bold" size:15];
        UIFont *cellFont2 = [UIFont fontWithName:@"Verdana-Bold" size:12];

    }
    else {
    // Configure the cell to show todo item with a priority at the bottom
    cell.profileName.text = object[@"Title"];
    cell.contentLabel.text = object[@"Request"];
    cell.firstName = object[@"FirstName"];
    cell.lastName = object[@"LastName"];
    cell.iostoken = object[@"DeviceID"];
    cell.request = object[@"Title"];
    cell.prayerObject = object;
    PFFile *thumbnail = object[@"ProfilePic"];
    cell.profilePic.image = [UIImage imageNamed:@"AppIcon60x60@2x.png"];

    [thumbnail getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {

        UIImage *thumbnailImage = [UIImage imageWithData:imageData];
        UIImageView *thumbnailImageView = [[UIImageView alloc] initWithImage:thumbnailImage];

        cell.profilePic.image = thumbnailImage;

    }];
    NSString *dates = object[@"dateMade"];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MMM_dd_yyyy"];
   NSDate *datefromstring = [formatter dateFromString:dates];
    NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
    [formatter2 setDateFormat:@"MMM dd, yyyy"];
    cell.dateLabel.text = [formatter2 stringFromDate:datefromstring];

    }


    return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
     PFObject *entry = [self.objects objectAtIndex:indexPath.row];
    NSString *commentString = entry[@"Request"];
    NSString *nameString = @"";
    NSLog(@"%@", commentString);
return [Cell heightForCellWithContentString:(NSString *)commentString] +25 ;
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200

    if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
    {
        if (_webViewController2 == nil) {
            self.webViewController2 = [[[WebViewController2 alloc] initWithNibName:@"WebViewController2" bundle:[NSBundle mainBundle]] autorelease];
        }
        RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
        _webViewController2.entry = entry;
        [self.navigationController pushViewController:_webViewController2 animated:YES];
         [self.objects objectAtIndex:indexPath.row];
    }




    else {
        PFObject *entry = [self.objects objectAtIndex:indexPath.row];
        if (_webViewController == nil) {
            self.webViewController = [[[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]] autorelease];
        }

        _webViewController.finalObject = entry;
        [self.navigationController pushViewController:_webViewController animated:YES];
    }
#endif

}

As I understand, that should load up 20 items at a time, and when you scroll to the end of those, load up the next 20. However, once I have 20 items, the app crashes, and I get this message:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 20 beyond bounds [0 .. 19]'

After putting an exception breakpoint in, the line causing the error is in the heightForRow method

 PFObject *entry = [self.objects objectAtIndex:indexPath.row];

What's going on?

来源:https://stackoverflow.com/questions/28510205/parse-pagination-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!