2011-06-22 40 views
-3

可能重复:
iPhone UITableView SectionsiPhone的UITableView节不工作

基本上家伙试图2把表分成两个不同的部分,但无论我尝试它似乎不工作,有是我的代码,请你能告诉我哪里出错了,示例将不胜感激!没有人设法解决这个问题,我一直坚持一段时间。感谢Sam Houghton。

#import <Foundation/Foundation.h> 


@interface FirstLevelViewController : UITableViewController { 
    NSArray *controllers; 
    NSMutableArray *male; 
    NSMutableArray *female; 
} 

@property (nonatomic, retain) NSArray *controllers; 
@property (nonatomic, retain) NSMutableArray *male; 
@property (nonatomic, retain) NSMutableArray *female; 

@end 



#import "FirstLevelViewController.h" 
#import "SecondLevelViewController.h" 
#import "DisclosureDetailController.h" 
#import "SecondVoiceController.h" 
#import "ThirdVoiceController.h" 

@implementation FirstLevelViewController 
@synthesize controllers,male,female; 

-(void)viewDidLoad { 
    self.title = @"Voices"; 
    DisclosureDetailController *th = [DisclosureDetailController alloc]; 
    th.title = @"First Voice"; 
    [male addObject:th]; 
    [th release]; 

    SecondVoiceController *array2 = [SecondVoiceController alloc]; 
    array2.title = @"Second Voice"; 
    [male addObject:array2]; 
    [array2 release]; 

    ThirdVoiceController *array3 = [ThirdVoiceController alloc]; 
    array3.title = @"Third Voice"; 
    [female addObject:array3]; 
    [array3 release]; 

    self.controllers = male; 
    [female release]; 
    [male release]; 
    [super viewDidLoad]; 
} 

-(void)viewDidUnload { 
    self.male = nil; 
    self.female = nil; 
    self.controllers = nil; 
    [super viewDidUnload]; 
} 

-(void)dealloc { 
    [male release]; 
    [female release]; 
    [controllers release]; 
    [super dealloc]; 
} 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 2; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
     switch(section){ 
       case 0: 
       return [male count]; 
       break; 
       case 1: 
       return [female count]; 
       break; 
      } 
    } 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *FirstLevelCell= @"FirstLevelCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:FirstLevelCell]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:FirstLevelCell] autorelease]; 
    } 
    SecondLevelViewController *controller; 
    switch([indexPath section]){ 
     case 0: 
       controller = [male objectAtIndex: [indexPath row] ]; 
       break; 
     case 1: 
       controller = [female objectAtIndex: [indexPath row] ]; 
       break; 
    } 
    cell.textLabel.text = controller.title; 
    cell.imageView.image = controller.rowImage; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    return cell; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSUInteger row = [indexPath row]; 
    SecondLevelViewController *nextViewController = [self.controllers objectAtIndex:row]; 
    [self.navigationController pushViewController:nextViewController animated:YES]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return NO; 
} 

@end 

基本上家伙试图2把表分成两个不同的部分,但无论我尝试它似乎没有工作,还有我的代码,请你能告诉我,我要去哪里错了,例子是大大不胜感激!没有人设法解决这个问题,我一直坚持一段时间。感谢Sam Houghton

+0

不完全确定你正在尝试做什么,但是这肯定看起来不正确: DisclosureDetailController * th = [DisclosureDetailController alloc]; 你应该有[[DisclosureDetailController alloc] init]; – hundreth

+1

你可以更新你的文章,以便它使用的代码块? – Rob

+0

嗯,我正在尝试创建一个表格视图,它有三个单元格,这些单元格都会推动一个新的视图。我需要前两个单元格放在桌子上的男性部分中,第三个女孩放在桌子上的另一个女性部分中我不知道如何将我的三个单元格分成不同的部分,谢谢Sam Houghton – Sam

回答

1

由于格式化,代码有点难以阅读,显然,如果我误读了任何内容,我很抱歉。但是在添加任何对象之前,您需要先拨打male = [[NSMutableArray alloc] init];female = [[NSMutableArray alloc] init];。如果未分配阵列,它们将不会响应addObject。调用addObject时不会出现任何错误,如果您尚未首先分配并初始化它,则不会执行此操作。

2

你的代码有一堆错误。

  1. 下次请格式化您的代码。 :)
  2. 在一些地方,你这样做是:

    DisclosureDetailController *th = [DisclosureDetailController alloc]; 
    ... 
    SecondVoiceController *array2 = [SecondVoiceController alloc]; 
    ... 
    ThirdVoiceController *array3 = [ThirdVoiceController alloc]; 
    

    您必须从未使用对象而不对其进行初始化。您在使用它之前必须调用init方法(或相应的初始化程序)。

  3. 您的房产初始化为nil。你永远不会创建它们应该指向的对象。因此,[male count][female count]将始终返回0.换句话说,声明一个属性与初始化属性不同。