2013-02-10 1 views
2

Я пытаюсь создать простую приложение для iOS, которая использует UINavigationController два ViewController и UITableView для отображения списка. Проблема в том, что таблица отказывается отображать данные из NSArray. Все делегаты настроены так, как вы видите на снимках.xcode 4.5 Распаковка iOS и недопустимость делегирования делегата UITableView

enter image description here

enter image description here

Каждая вещь работает, если я создать файл XIb для ViewController, но мне не нужно еще один XIb файл, если я могу перетащить еще одну ViewController в раскадровке и связать это класс мой ItemListViewController, как вы видите на первом снимке.

ItemListViewController.h

 
#import 

@interface ItemListViewController : UIViewController{ 
    NSMutableArray *tblDataSource; 
    IBOutlet UITableView *tblSimpleTable; 
} 

@property (assign) NSMutableArray *tblDataSource; 
@property (retain) IBOutlet UITableView *tblSimpleTable; 

@end 

ItemListViewController.m

 
#import "ItemListViewController.h" 

@interface ItemListViewController() 

@end 

@implementation ItemListViewController 

@synthesize tblDataSource,tblSimpleTable; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bg.png"]]; 
    self.tblSimpleTable.backgroundColor = background; 
    [background release]; 

    NSArray * data = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil]; 
    [tblDataSource setArray:data]; 
} 

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

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    return 0; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    NSLog(@"@%d",[tblDataSource count]); 
    return [tblDataSource count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 
    UIImage *placeholder = [UIImage imageNamed:@"icon.png"]; 
    [cell.imageView setImage:placeholder]; 
    cell.textLabel.text = [tblDataSource objectAtIndex:indexPath.row]; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"Clicked on row @%d",indexPath.row); 
} 

@end 

Если кто-то может мне точку в правильном направлении, что я делаю неправильно.

ответ

2

В numberOfSectionsInTableView вы возвращаете 0, в котором говорится, что нет секций для генерации (и, следовательно, и строк). Вы, вероятно, хотите, чтобы вернуть 1.

Кроме того, вы хотите, чтобы убедиться, что вы сохраняете свой NSMutableArray, так что вы действительно хотите сделать:

@property (nonatomic, retain) NSMutableArray *tblDataSource; 
+0

я вернуть 1, и таблица в любом случае не отображает ничего там. – Constantin

+0

Ответ был верным :) проблема заключалась также в том, как я добавлял элементы в массив данных datasource :) [tblDataSource setArray: data]; не работал, поэтому я изменил его на tblDataSource = [[NSMutableArray alloc] initWithObjects: @ «Яйцо Бенедикт», @ «Грибное ризотто», ноль]; и он работает: D Спасибо, что указал мне в правильном направлении и помог мне отладить его. – Constantin

+0

@Constantine Кстати, эквивалентно тому, что вы сделали, вы можете изменить свойство на 'keep' (и оставить свое создание массива таким, каким оно было). Это, вероятно, эквивалентно, но делает правильное управление памятью более явным. Кроме того, (поскольку вы не используете ARC), не забудьте указать свой метод 'dealloc' для выпуска' tblDataSource', поэтому массив будет очищен, когда вы закончите. – Rob