简体   繁体   中英

cellForRowAtIndexPath is not called?

My cellForRowAtIndexPath does not fire everytime I set dataSource and delegate to the file owner. I also set referencing outlet. I also try tbl.delegate=self; and tbl.datasource=self; but it does not work.

What can I do?

   -(void)load
   {
       [name resignFirstResponder];
       [salary resignFirstResponder];
       name.text=@"";
       salary.text=@"";
       [tblViewController.data removeAllObjects];

       NSString *insertStatement = [NSString stringWithFormat:@"select * from emp"];

       sqlite3_stmt *statement;
       NSString *path= [self getDBPath];

       if (sqlite3_open([path UTF8String], &db) == SQLITE_OK)
       {
           if (sqlite3_prepare_v2(db, [insertStatement  UTF8String], -1,&statement, NULL) == SQLITE_OK)
           {
               while (sqlite3_step(statement) == SQLITE_ROW)
               {

                   NSMutableDictionary *record=[[NSMutableDictionary alloc]init];

                   NSString *nm= [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,0)];

                   NSString * sl= [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,1)];

                   [record setValue:nm forKey:@"name"];
                   [record setValue:sl  forKey:@"salary"];

                   NSLog(@"%@ %@",nm,sl);

                   [tblViewController.data addObject:record];

                   NSLog(@"%@",tblViewController.data);

               }
               sqlite3_finalize(statement);
           }
           sqlite3_close(db);
       }
       NSLog(@"%lu",(unsigned long)[tblViewController.data count]);
       [tblViewController.tbl reloadData];
   }

//This code is of tableviewcontroller.m

            #import "tableViewController.h"
       #import "ViewController.h"

   @interface tableViewController ()

    @end

   @implementation tableViewController
   @synthesize tbl,data;
   @synthesize viewOfTable;


   - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
    NSLog(@"only for check");
    [self setup];
   }
return self;
  }

    - (void)viewDidLoad
    {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
//[self setup];
tbl.delegate = self;
       }

    - (void)didReceiveMemoryWarning
    {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
   }
    -( NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
   {
return  1;
    }

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

return [data count];

    }

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath
  {

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {

    cell = [[UITableViewCell alloc]
            initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];

}

cell.textLabel.text=[[data objectAtIndex:indexPath.row] valueForKey:@
                     "name"];
cell.detailTextLabel.text=[[data objectAtIndex:indexPath.row]
                           valueForKey:@"salary"];

return cell;
    }

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
       //name.text =[[data objectAtIndex:indexPath.row] valueForKey:@"name"];
        //  salary.text=[[data objectAtIndex:indexPath.row] valueForKey:@"salary"];
    }

    - (void)setup
   {
//Store the whole view in uiView...mac
// [[NSBundle mainBundle] loadNibNamed:@"RegistrationViewController" owner:self options:nil];
viewOfTable=[[UIView alloc]initWithFrame:self.view.frame];

[viewOfTable addSubview:self.view];
self.viewOfTable.translatesAutoresizingMaskIntoConstraints=YES;
   }

Please solve my problem. You didn't get anything then please tell me.

You need to set Table DataSource in order to tableView to construct table rows.

 #import "tableViewController.h"
 #import "ViewController.h"

   @interface tableViewController ()  <UITableViewDataSource,UITableViewDelegate>

  - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    tbl.dataSource = self
    tbl.delegate = self;
     }

或者您可以检查数据数组中是否存在错误,因为如果其大小为0,则说明某节中没有行,并且这些行中也没有单元格,并且永远不会调用cellForRowAtIndexPath ...

You should set dataSource and delegate. When you do this, check tbl. Maybe it nil? If not check what value returns

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

If you implement

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

check it.

No more options.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM