2012-01-29 2 views
0

У меня есть некоторые NSMutableArray в Tableview, которые содержат класс УрокUITableView Переместить строку

@interface Lesson : NSObject <NSCoding>{ 

    NSString *time1; 
    NSString *time2; 
    NSString *predmet; 
    NSString *namPrepod; 
    NSString *zamet; 
} 

переместить строку в Tableview ...................... .................................................. .................................................. ......

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 
{ 
    if(segmentedControl.selectedSegmentIndex==0) 
    { 
    if(fromIndexPath.section==0) 
    { 
     NSMutableArray *r = [[Singleton sharedInstance].chetNedel.monday objectAtIndex:fromIndexPath.row]; 
     [[Singleton sharedInstance].chetNedel.monday removeObjectAtIndex:fromIndexPath.row]; 
     [[Singleton sharedInstance].chetNedel.monday insertObject:r atIndex:toIndexPath.row]; 
    } 
    if(fromIndexPath.section==1) 
    { 
     NSMutableArray *r = [[Singleton sharedInstance].chetNedel.tuesday objectAtIndex:fromIndexPath.row]; 
     [[Singleton sharedInstance].chetNedel.monday removeObjectAtIndex:fromIndexPath.row]; 
     [[Singleton sharedInstance].chetNedel.monday insertObject:r atIndex:toIndexPath.row]; 
    } 

, но когда я перехожу строку в программе я получил ошибку на этой линии

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     .......... 
if(segmentedControl.selectedSegmentIndex==0) 
    { 
     time1 = [[[UILabel alloc] init] autorelease]; 
     time1.font = [UIFont fontWithName:@"Arial-BoldMT" size:13]; 
     time1.tag = tagtime1; 
     time1.backgroundColor = [UIColor clearColor]; 
     if(indexPath.section ==0) 
      time1.text =[(Lesson *) [[Singleton sharedInstance].chetNedel.monday objectAtIndex:indexPath.row] time1]; 
     if(indexPath.section ==1) 
      time1.text =[(Lesson *) [[Singleton sharedInstance].chetNedel.tuesday objectAtIndex:indexPath.row] time1]; 
     if(indexPath.section ==2) 
      time1.text =[(Lesson *) [[Singleton sharedInstance].chetNedel.wednesday objectAtIndex:indexPath.row] time1]; 
     if(indexPath.section ==3) 
      time1.text =[(Lesson *) [[Singleton sharedInstance].chetNedel.thirsday objectAtIndex:indexPath.row] time1]; 
     if(indexPath.section ==4) 
      time1.text =[(Lesson *) [[Singleton sharedInstance].chetNedel.friday objectAtIndex:indexPath.row] time1]; 
     if(indexPath.section ==5) 
      time1.text =[(Lesson *) [[Singleton sharedInstance].chetNedel.saturday objectAtIndex:indexPath.row] time1]; 
     time1.frame = CGRectMake(8, 12, 300-124, 11); 
    ........... 
[cell.contentView addSubview:time1]; 

что я делаю неправильно?

ответ

2

Какая ошибка вы получаете точно? Однако, глядя на ваш код, я думаю, что проблема возникает, когда вы делаете removeObjectAtIndex, а затем insertObject: atIndex :. После удаления объекта индексы массива пересчитываются, и теперь у вас есть 1 объект меньше в вашем массиве. Поэтому, если вы затем сделаете insertObject: atIndex, не уменьшая индекс, в который хотите его поместить, вы не получите его там, где хотите. Я предлагаю вам объединить обе строки в одну и использовать exchangeObjectAtIndex: withObjectAtIndex: вместо этого. Вот обновленный код:

if(fromIndexPath.section==0) 
{ 
    [[Singleton sharedInstance].chetNedel.monday exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row]; 
} 
if(fromIndexPath.section==1) 
{ 
    [[Singleton sharedInstance].chetNedel.tuesday exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row]; 
} 
+0

Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [__ NSArrayM time1]: непризнанный селектор отправлен в экземпляр 0x600c2f0' – Pavel

+0

эта ошибка в этой строке time1.text = [(Lesson *) [[Singleton sharedInstance] .chetNedel .minay objectAtIndex: indexPath.row] time1]; – Pavel

+0

звучит так, будто вы можете получить доступ к позиции массива, которая вышла из строя. Вы пытались объединить ваш removeObjectAtIndex, а затем insertObject: atIndex: в один exchangeObjectAtIndex: withObjectAtIndex: как я предложил? – ragamufin

0

Я не могу найти вашу ошибку, но я думаю, что вы должны использовать пользовательский UITableViewCell вместо добавления UILabele в каждую строку ... потому что ячейка переработана, а время1 может уже существовать.

+0

как я могу это сделать? пример пожалуйста – Pavel

+0

эта ссылка http://howtomakeiphoneapps.com/how-to-design-a-custom-uitableviewcell-from-scratch/1292/ может вам помочь. –

Смежные вопросы