TableView не перезагружает данные, когда я нажимал «Больше данных ...» в последней строке tableView - PullRequest
0 голосов
/ 19 марта 2012

Запросить мой тестовый веб-сервис для данных,

Последняя строка tableView - "Больше данных ..."

когда щелкните по этой строке, отправьте другой запрос, чтобы получить больше данных,

и я использую [tableView reloaddata] много раз, но ничего не произошло

, и я не знаю почему. Так что, пожалуйста, помогите мне с этой проблемой.

Спасибо зазаранее.

и есть мой класс tableViewController.h:

#import <UIKit/UIKit.h>

#import "NoticeDetailViewController.h"

@interface NoticeViewController : UIViewController
<UITableViewDataSource,UITableViewDelegate>
{    
    NSMutableArray *allNoticeArray;

    NSArray *addNoticeArray;

    NSInteger totalNotice;

    NSInteger pageIndex;

    UITableView *tableView;
}

@property (nonatomic, retain) NSMutableArray *allNoticeArray;
@property (nonatomic, retain) NSArray *addNoticeArray;
@property NSInteger totalNotice;
@property NSInteger pageIndex;
@property (nonatomic, retain) UITableView *tableView;
- (NSMutableArray *)getNoticeList :(NSInteger)pageIndex;
@end

И класс tableViewController.m:

#import "NoticeViewController.h"
#import "Notice.h"
#import "OAURLEncodingAdditions.h"
@interface NoticeViewController ()
@end

@implementation NoticeViewController
@synthesize allNoticeArray;
@synthesize addNoticeArray;
@synthesize pageIndex;
@synthesize tableView;
@synthesize totalNotice;

- (NSMutableArray *)getNoticeList :(NSInteger)pageIndex
    { 
        AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        NSString *userId = appDelegate.user.userId;
        NSString *departmentId = appDelegate.user.departmentId;

        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://xxx.xxx.xx.xx/FMS/Pages/Service/FMService.svc/GetAnnouncement?userId=%@&departmentId=%@&pageIndex=%d&pageSize=%d",userId,departmentId,self.pageIndex,1]];
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        [request setValidatesSecureCertificate:NO];
        [request startSynchronous];
        NSError *error = [request error];
        if (!error) 
        {
            NSString *responseString = [request responseString];
            NSDictionary *responseDict = [responseString JSONValue];
            NSArray *noticeArray = [responseDict objectForKey:@"d"];

            NSMutableArray *arrayOfAllNotice = [[NSMutableArray alloc] init];

            for (NSDictionary *noticeDic in noticeArray) 
            {
                NSString *body = [noticeDic objectForKey:@"Body"];
                NSString *departmentName = [noticeDic objectForKey:@"DepartmentName"];
                NSString *noticeId = [noticeDic objectForKey:@"Id"];
                NSString *isTop = [noticeDic objectForKey:@"IsTop"];
                NSString *readState = [noticeDic objectForKey:@"ReadState"];
                NSString *realName = [noticeDic objectForKey:@"RealName"];
                NSString *title = [noticeDic objectForKey:@"Title"];

                int noid = [noticeId intValue];
                int isto = [isTop intValue];
                int read = [readState intValue];

                Notice *notice = [[Notice alloc] initWithBody:body 
                                       departmentName:departmentName 
                                             noticeId: noid 
                                                isTop:isto 
                                            readState:read 
                                             realName:realName 
                                                title:title];
                [arrayOfAllNotice addObject:notice];
            }
        self.addNoticeArray = [[NSArray alloc] initWithArray:arrayOfAllNotice];
    }
    else
    {
       ....
    }
    [allNoticeArray addObjectsFromArray:addNoticeArray];    
    NSLog(@"allNoticeArray count: %d",[allNoticeArray count]);  //Here:When the last row clicked, the number changes:1->2  
    [self.tableView reloadData]; 
    return allNoticeArray;
}

#pragma mark - 
#pragma mark Table View Data Source Methods

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger theNumberOfRowsInSection;

    if ( [allNoticeArray count] < (self.totalNotice)) 
    {
        theNumberOfRowsInSection = [allNoticeArray count]+1;
    }
    if ( [allNoticeArray count] == (self.totalNotice)) 
    {
        theNumberOfRowsInSection = [allNoticeArray count];
    }

    return theNumberOfRowsInSection; 
}

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.tableView reloadData];

    static NSString *NoticeListTableIdentifier = @"NoticeListTableIdentifier";
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:NoticeListTableIdentifier];
    if ( cell == nil ) 
    {
        cell = [[[UITableViewCell alloc]
             initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NoticeListTableIdentifier] autorelease];
    }

    if ( [allNoticeArray count] < (self.totalNotice) ) 
    {
        if ( [indexPath row] != [allNoticeArray count]) 
        {
            NSUInteger row = [indexPath row];
            Notice *noticeOfTheRow = [allNoticeArray objectAtIndex:row];
            NSString *title = noticeOfTheRow.title;
            cell.textLabel.text = title;
        }
        else 
        {
            cell.textLabel.text = @"More...";
        }
    }
    if ( [allNoticeArray count] == (self.totalNotice) ) 
    {
        NSUInteger row = [indexPath row];
        Notice *noticeOfTheRow = [allNoticeArray objectAtIndex:row];
        NSString *title = noticeOfTheRow.title;
        cell.textLabel.text = title;
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ( [indexPath row] != [allNoticeArray count]) 
    {        
        NSUInteger row = [indexPath row];       
        Notice *notice = [allNoticeArray objectAtIndex:row];        
        NSString *noticeDetailTitle = notice.title;        
        NoticeDetailViewController *noticeDetailViewController = [[[NoticeDetailViewController alloc] init] autorelease];
        noticeDetailViewController.title = noticeDetailTitle;        
        ticeDetailViewController.noticeIdForGet = notice.noticeId;        
        [self.navigationController pushViewController:noticeDetailViewController animated:YES];        
    }
    if ( [indexPath row] == [allNoticeArray count]) 
    {        
        MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
        hud.labelText = @"reload...";        
        self.pageIndex ++;        
        [self getNoticeList:self.pageIndex];        
        [self.tableView reloadData];        
        [MBProgressHUD hideHUDForView:self.view animated:YES];        
    }
}

- (void)pushBack
{
    [self dismissModalViewControllerAnimated:YES];
}

- (void)viewDidLoad
{
    [super viewDidLoad];  
    self.allNoticeArray = [[NSMutableArray alloc] init];
    self.pageIndex = 1;    
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.labelText = @"reload...";    
    self.title = @"Notice";    
    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"back" 
                                                                       style:UIBarButtonItemStyleBordered 
                                                                      target:self 
                                                                      action:@selector(pushBack)];
self.navigationItem.leftBarButtonItem = leftButton;


    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"reload" 
                                                                      style:UIBarButtonItemStyleBordered 
                                                                     target:self 
                                                                     action:@selector(reloadNotice)];
    self.navigationItem.rightBarButtonItem = rightButton;
    self.allNoticeArray = [self getNoticeList:self.pageIndex];    
    [MBProgressHUD hideHUDForView:self.view animated:YES];
 }
@end

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Кстати, благодаря новым языковым функциям, нет необходимости объявлять ивары в интерфейсе. Компилятор позаботится о них, если вы уже объявили свойства и синтезировали их.

@interface NoticeViewController : UIViewController
<UITableViewDataSource,UITableViewDelegate>
{    
    NSMutableArray *allNoticeArray;

    NSArray *addNoticeArray;

    NSInteger totalNotice;

    NSInteger pageIndex;

    UITableView *tableView;
}
//...
@end
0 голосов
/ 19 марта 2012

изменение:

if ( [indexPath row] == [allNoticeArray count])

до:

if ( [indexPath row] == [allNoticeArray count]-1)

Причина в том, что индексирование массива (и строки) основано на 0. Поэтому, если массив имеет, скажем, 3 объекта, индекс последнего объекта равен 2

...