2011-11-27 54 views
0

我有一个问题,我的数组未设置为我想要的部分。 在下的代码:部分中的数组问题(TableView)

  • (NSInteger的)的tableView:(UITableView的*)的tableView numberOfRowsInSection:(NSInteger的)部分

只有所述第二阵列被设置成部分,但它重复在其自其他2个部分,而不是其他部分的其他部分。我有 - 如果我把一个数组(比方说第三个)多于5行像第一个和第二个数组,它给我错误:终止应用程序由于未捕获的异常'NSRangeException' ,原因: '* - [__ NSArrayM objectAtIndex:]:指数5超出范围[0 .. 4]'

我在做什么错? 感谢您的帮助!

代码:

(该sectionArray和dataArray中都在我的.h文件中的NSMutableArray变量)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
sectionArray = [NSArray arrayWithObjects:@"section1", @"section2", @"section3", nil]; 

return [sectionArray count]; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:  (NSInteger)section 
{ 

NSString *sectionHeader = nil; 

    if(section == 0) 
    { 
     sectionHeader = @"אתרים חשובים"; 
    } 

    if(section == 1) 
    { 
     sectionHeader = @"מתעניינים"; 
    } 

    if(section == 2) 
    { 
     sectionHeader = @"טלפונים שימושיים"; 
    } 

return sectionHeader; 
} 

// Returns the number of rows in a given section. 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{   
    if(section == 0) 
    { 
     dataArray = [[NSMutableArray alloc] initWithObjects: 
        @"אתר אורנים", 
        @"כניסה למערכת ניהול שיעורים", 
        @"אלפון אנשי סגל", 
        @"אתר אגודת הסטודנטים", 
        @"מפת אורנים", nil]; 
    } 

    if(section == 1) 
    { 
     dataArray = [[NSMutableArray alloc] initWithObjects: 
        @"תנאי קבלה", 
        @"שאלות נפוצות", 
        @"הרשמה אונליין", 
        @"יצירת קשר עם יועץ לימודים", 
        @"תחבורה ציבורית", nil]; 
    } 

    if(section == 2) 
    { 
     dataArray = [[NSMutableArray alloc] initWithObjects: 
        @"מרכז המידע וההרשמה", 
        @"שכר לימוד", 
        @"שכר לימוד (מספר נוסף)", 
        @"קופת אורנים", 
        @"מרכז ההשאלה בספריה", nil]; 
        /* 
        @"תמיכת הספריה", 
        @"מעונות", 
        @"מכלול", 
        @"רכז בטחון", 
        @"שער", 
        @"אגודת הסטודנטים", 
        @"רדיו אורנים", 
        @"פקולטות:", 
        @"מנהל תלמידים", 
        @"מנהל תלמידים (מספר נוסף)", nil]; 
         */ 
    } 

    return [dataArray count]; 
} 

// Returns the cell for a given indexPath. 
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath: (NSIndexPath *)indexPath 
{ 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) 
{ 
    // Create the cell. 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier]; 
} 

cell.textLabel.text = [dataArray objectAtIndex:indexPath.row]; 
cell.textLabel.textAlignment = UITextAlignmentRight; 

float Rvalue = (1.0 * 000)/255; 
float Gvalue = (1.0 * 139)/255; 
float Bvalue = (1.0 * 69)/255; 
cell.textLabel.textColor = [UIColor colorWithRed:Rvalue green:Gvalue blue:Bvalue alpha:1.0f]; 

UIImage *cellImage = [UIImage imageNamed:@"oranimCellIco.png"]; 
cell.imageView.image = cellImage; 

return cell; 
} 

回答

2

首先,您应该在委托方法之外创建和存储数据。在-(void)viewDidLoad;-(id)init;,事实上并不重要。重要的是,应该在委托调用之前创建数据数组(或数组或数组数组),并且在表视图调用数据委托时保持一致。

比方说,一些viewController.h

@property(nonatomic, retain)NSArray data; 
@property(nonatomic, retain)NSArray sections; 

和相应的viewController.m

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    self.sections = [[NSArray alloc] initWithObjects:@"אתרים חשובים",@"מתעניינים",@"טלפונים שימושיים",nil]; 
    self.data = [[NSArray alloc]initWithObjects: 
       [[NSArray alloc] initWithObjects: 
       @"אתר אורנים", 
       @"כניסה למערכת ניהול שיעורים", 
       @"אלפון אנשי סגל", 
       @"אתר אגודת הסטודנטים", 
       @"מפת אורנים", nil], 
       [[NSArray alloc] initWithObjects: 
       @"תנאי קבלה", 
       @"שאלות נפוצות", 
       @"הרשמה אונליין", 
       @"יצירת קשר עם יועץ לימודים", 
       @"תחבורה ציבורית", nil], 
       [[NSArray alloc] initWithObjects: 
       @"מרכז המידע וההרשמה", 
       @"שכר לימוד", 
       @"שכר לימוד (מספר נוסף)", 
       @"קופת אורנים", 
       @"מרכז ההשאלה בספריה", nil]nil]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return [self.sections count]; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ 
    return [self.sections objectAtIndex:section]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    NSArray* dataArray = [self.data objectAtIndex:indexPath.section]; 
    return [dataArray count]; 
} 

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil){ 
     // Create the cell. 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier]; 
    } 

    NSArray* dataArray = [data objectAtIndex:indexPath.section]; 
    cell.textLabel.text = [dataArray objectAtIndex:indexPath.row]; 
    cell.textLabel.textAlignment = UITextAlignmentRight; 

    cell.textLabel.textColor = [UIColor colorWithRed:0.0 green:139.0/255.0 blue:69.0/255.0 alpha:1.0]; 

    UIImage *cellImage = [UIImage imageNamed:@"oranimCellIco.png"]; 
    cell.imageView.image = cellImage; 

    return cell; 
} 

קצתסדרבקודלאיפגעאףפעם:)

+0

正在加载中,请稍候...正在加载... לגביהקוד,סידרתיאותובדיוקכמושרשמתועםאותםשמותמשתניםאבלזהנותןלישתישגיאותבמקומותהבאים: - (NSInteger的)的tableView:(UITableView的*)的tableView numberOfRowsInSection:(NSInteger的)部分{ 的NSArray * dataArray中= [self.data objectAtIndex:indexPath.section]; return [dataArray count]; 使用说明: 使用未声明的标识符'indexpath' –

+0

已有保密声明使用条款隐私声明 המוןהמוןתולהעלהעזרה! –

+0

关于你的问题,这是我的错误...该代码是由我在浏览器中写道和XCode中没有被检查。 应该有: - (NSInteger的)的tableView:(UITableView的*)的tableView numberOfRowsInSection:(NSInteger的)部分{ 的NSArray * dataArray中= [self.data objectAtIndex:节]。 返回[dataArray中计数]; } – Ariel

0

的问题是,它没有规定怎样的TableView会打电话给你的委托方法。在您的代码中,只有在本节中仅在tableView:numberOfRowsInSection之后才会为每个部分调用tableView:cellForRowAtIndexPath:,它才会起作用。

如果您同时存储所有部分的数据,您的问题将得到解决。例如,您可以使用3个不同的数组(每个部分一个)或使用数组数组来存储项目。

+0

丹尼斯感谢您的帮助,但可以ü给我一个你写的东西的例子? –

+0

请参阅@ Ariel的回答,他如何初始化self.data数组 – Denis