2013-07-26 3 views
2

У меня есть tableView с некоторыми разделами и каждым разделом с некоторыми rows.Every строка имеет любимую кнопку. Если кнопка нажата, строка должна быть добавлена ​​в раздел избранных. (который изначально пуст).скопировать строку в другую секцию в UITableView

Я написал некоторый код. Но проблема в том, что он работает в симуляторе iOS 5 и сбой в симуляторе iOS 6 с ошибкой обновления Invalid tableView.

Может кто-нибудь сказать мне, где проблема?

-(void)moveRowToFavourites:(id)sender{ 
    UIButton *button = (UIButton *)sender; 
    UITableViewCell *cell = (UITableViewCell *)button.superview.superview; 
    NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 
    [tempArray addObject:[NSIndexPath indexPathForRow:favouritesArray.count inSection:0]]; 
    [favouritesArray insertObject:cell.textLabel.text atIndex:favouritesArray.count]; 
    [[self tableView] beginUpdates]; 
    [[self tableView] insertRowsAtIndexPaths:(NSArray *)tempArray withRowAnimation:UITableViewRowAnimationFade]; 
    [[self tableView] endUpdates]; 
} 

EDIT

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

    if(searching){ 
     return [self.searchResults count]; 
    } 
    else{ 
     if ([[arrayForBool objectAtIndex:section] boolValue]) { 
      if(section == 0){ 
       return favouritesArray.count; 
      }else{ 
       NSString* key = [self.proCategoriesArray objectAtIndex:section - 1]; 
       NSArray *aArray = [sectionContentDict valueForKey:key]; 
       return aArray.count; 
      } 
     } 
     return 1; 
    } 
} 
+1

Описание ошибки содержит очень четкое объяснение проблемы. –

+0

сделал ou try reloadData вместо обновлений? –

+0

Какая ошибка? –

ответ

0

Похоже, ваш источник данных возвращает 0, как количество разделов и строк. Вы не правильно вставляете/удаляете строки, когда вы вставляете новую строку, методы источника данных снова вызываются, и если вы, например, пытаетесь вставить объект таким образом, чтобы количество строк было равно 4, а источник данных tableView:numberOfRowsInSection: возвращает 3 , вы получаете исключение, потому что пытаетесь сделать еще несколько объектов, которые обещает источник данных.

При попытке обновить представление таблицы все эти методы источника данных дозвонились снова:

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView; 
- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*) indexPath; 

Вы должны убедиться, что они возвращают правильные значения. Я подозреваю, что вы даже не реализуете их.

Редактировать

Проблема заключается в том, что вы просто вставить новый объект в favouritesArray, но это не влияет на количество строк, возвращаемых tableView:numberOfRowsInSection:. Там вы не возвращаетесь favouritesArray.count, исключение связано с тем, что tableView:numberOfRowsInSection: возвращает меньшее число, чем строки, которые должны иметь представление таблицы.

В вашем случае я думаю, что вам даже не нужно вызывать insertRowsAtIndexPaths:, вы можете делать все с источником данных:

-(void)moveRowToFavourites:(id)sender { 
    UIButton *button = (UIButton *)sender; 
    UITableViewCell *cell = (UITableViewCell *)button.superview.superview; 
    [favouritesArray insertObject:cell.textLabel.text atIndex:favouritesArray.count]; 
    [[self tableView]reloadData]; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return favouritesArray.count; 
} 

В tableView:cellForRowAtIndexPath: вы должны вернуть ячейку, которая имеет объект сгружен форму favouritesArray как текст.

+0

да, вот где ошибка. но все кажется прекрасным и работает в симуляторе iOS5, и я получаю эту ошибку в iOS6 и выше симуляторах –

+0

@ChandraSekhar Могу ли я увидеть методы источника данных? Я уверен, что ошибка есть. –

+0

ya sure, я обновил код –

0

Вы просто должны назвать следующие:

[favouritesArray addObject:cell.textLabel.text]; 
[tableView reloadData]; 

Убедитесь, что вы реализовали эту функцию:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    switch(section){ 
     case 0: 
      return favouritesArray.count; 
     //Your other sections have to placed here, too 
     default: 
      return 0; 
    } 
} 

Тогда ваш Tableview должен обновляться. Проблема в том, что вы вставляете целые ячейки, но вам просто нужно вставить данные в свой массив. Надеюсь, поможет!

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