UITableview - 无法重新加载数据

时间:2013-10-07 10:48:08

标签: objective-c uitableview storyboard reloaddata

我是Obj-c编程的noob。我正在制作一个由ViewController组成的iPad应用程序,它向我显示2个文本框,在上方显示一个按钮,只是为了得到一笔钱。

在同一个Viewcontroller中,我有一个TableView和一个Button。这个Tableview最初向我展示了一个元素,但我只想点击按钮就刷新这个列表。

按钮上链接的功能刷新列表(触碰事件)称为“listaPDF”。

Viewcontroller.h

#import <UIKit/UIKit.h>

@interface VPViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    IBOutlet UITextField *txtPrimoAddendo ;
    IBOutlet UITextField *txtSecondoAddendo ;
    IBOutlet UILabel *lblTotale ;
    IBOutlet UITableView *tabella;
    NSMutableArray *lista;
   }

@property (nonatomic, retain) IBOutlet UITextField *txtPrimoAddendo;
@property (nonatomic, retain) IBOutlet UITextField *txtSecondoAddendo;
@property (nonatomic, retain) IBOutlet UILabel *lblTotale;
@property (nonatomic, retain) IBOutlet UITableView *tabella;
@property (nonatomic, retain) NSMutableArray *lista;

-(IBAction)somma ;
-(IBAction)listaPDF;

@end

Viewcontroller.m

    #import "VPViewController.h"

    @interface VPViewController ()

    @end

    @implementation VPViewController

    -(void)somma {

    int x = [[txtPrimoAddendo text] intValue];
    int y = [[txtSecondoAddendo text] intValue];
    int somma = x + y ;

    NSString *totale = [NSString stringWithFormat:@"La somma fa : %d", somma];

    [lblTotale setText:totale];
    [lblTotale setHidden:FALSE];


    }
    - (void)listaPDF {

    int contatore = 1;

    NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] resourcePath] error: nil];
    for (int i = 0; i < dirFiles.count ; i++) {

        NSString *files = dirFiles[i];
        int indice = files.length - 4 ;
        NSString *extension = [files substringFromIndex:indice];

        if([extension  isEqual: @".pdf"]) {

            NSLog(@"********* File PDF : %@", files);
            [lista insertObject:files atIndex:contatore];
            contatore++;
        }
    }
    [tabella reloadData];

    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [lista count];
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *simpleTableIdentifier = @"CellID";

    UITableViewCell *cell = [tabella dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    cell.imageView.image = [UIImage imageNamed:@"pdf.png"];
    cell.textLabel.text = [lista objectAtIndex:indexPath.row];
    return cell;
    }


    - (void)viewDidLoad
    {
        tabella.delegate = self;
        tabella.dataSource = self;

        tabella = [[ UITableView alloc] init];
        lista = [[NSMutableArray alloc] init];

        [lista insertObject:@"FIRST ELEMENT" atIndex:0];


    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    }

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

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}

@synthesize lblTotale;
@synthesize txtPrimoAddendo;
@synthesize txtSecondoAddendo;
@synthesize tabella;
@synthesize lista;


@end

由于

2 个答案:

答案 0 :(得分:1)

我已按原样尝试了您的代码。

为什么要在viewDidLoad中初始化UITableView对象。如果要添加Xib文件,则无需分配。如果以编程方式创建UITableView则需要它。只需注释/删除初始化行,将调用tableView的委托方法。

在“ListaPDF”函数中,没有项目被添加到数组'lista',这就是UITableView中没有新条目可见的原因。

答案 1 :(得分:0)

NSMutableArray指数从0开始 - 而不是1

int contatore = 1;

...

[lista insertObject:files atIndex:contatore];
contatore++;

使用addObject将对象添加到NSMutableArray

[lista addObject:files];

删除所有实例变量,因为:

 @property (nonatomic, retain) NSMutableArray *lista;

创建一个名为_lista的实例变量 - 而不是lista

你有相当多的代码倒退:

tabella.delegate = self;
tabella.dataSource = self;

tabella = [[ UITableView alloc] init];
lista = [[NSMutableArray alloc] init];

您尝试在分配表格之前设置delegatedatasource

应该是:

tabella = [[ UITableView alloc] init];
lista = [[NSMutableArray alloc] init];

tabella.delegate = self;
tabella.dataSource = self;

然而,在Interface Builder中添加了UITableView,对吧?

这意味着它已经为您创建,您不应该在此处分配表。

另外:在Interface Builder中,您可以右键单击+拖动(或按住Ctrl +左键单击并拖动)以将UITableViewUIViewControllerdelegate datasource连接起来{{1}} < / p>