2015-06-27 64 views
0

這是我的代碼。而且昨天它工作得很好。但今天早上,它不起作用。insertRowsAtIndexPaths或reloadData不迴應

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == 0) { 
     RSDrug *drug = [[RSDrug alloc]init]; 
     [drugArray insertObject:drug atIndex:0]; 
     NSIndexPath *ip = [NSIndexPath indexPathForRow:1 inSection:0]; 
     [tableView insertRowsAtIndexPaths:@[ip] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

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

我曾嘗試添加一些代碼像beginUpdates/endUpdates,或我刪除insertRowsAtIndexPaths,只需使用reloadData。

但是結果相同。當應用程序運行到insertRowsAtIndexPaths或reloadData時,它卡住了,沒有響應。

所以我需要一些幫助。如何解決這個問題?

發現問題..........一個愚蠢的錯誤

有在添加單元中有兩個UITextFields,它們都具有相同的leftView,我的代碼是這樣的:

UIImageView *leftImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"img"]]; 
field_1.leftView = leftImage; 
field_2.leftView = leftImage; 

我從來不知道我不能重用leftView。如果我將leftImage設置爲field1,則無法將其設置爲field2。

當我改變爲這個,它再次工作。

field_1.leftView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"img"]]; 
field_2.leftView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"img"]]; 

回答

0

你試過嗎?

RSDrug *drug = [[RSDrug alloc]init]; 

[drugArray insertObject:drug atIndex:0]; 
[tableView beginUpdates]; 

    // indexpath inserted is with the index 0 same with the `insertObject: ` 
    NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [tableView insertRowsAtIndexPaths:@[ip] withRowAnimation:UITableViewRowAnimationAutomatic]; 

    //here is what i use to do instead of @[] 
    //[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:ip] withRowAnimation:UITableViewRowAnimationAutomatic]; 

[tableView endUpdates]; 

編輯 你的代碼工作正常。我測試了它。在這裏..

代碼:

enter image description here

輸出:

enter image description here

登錄:

enter image description here

如果您遺漏了某些內容,請檢查上面的測試代碼。

我認爲問題是您的表的代表,請確保您的表具有UITableViewDataSource & UITableViewDelegate的代表。

希望這是有幫助的..乾杯.. :)

+0

我知道如果我寫indexPathForRow:0它會工作,但它不是我所需要的。默認情況下,我的tableview有一行,這一行作爲一個按鈕,我點擊它,tableview添加一行。並且總是在第2行添加它,所以我必須使用indexPathForRow:1。 – ghysrc

+0

Ahhh ..好的..所以這''drugArray insertObject:drug atIndex:0];'應該是'[drugArray insertObject:drug atIndex:1];''和'[NSIndexPath indexPathForRow:1 inSection:0];'? – 0yeoj

+0

'numberOfRowsInSection return drugArray.count + 1;'默認情況下,drugArray是一個空數組,當點擊第一行時,它會添加一個對象。所以索引是0;我認爲這些索引是正確的,因爲這些代碼以前工作得很好,但我不知道爲什麼它不能工作,我昨天和今天早上沒有做任何改變。 – ghysrc

0

試試這個順序...

NSMutableArray *indexPaths=[[NSMutableArray alloc]init]; 


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    [tableView beginUpdates]; 

    RSDrug *drug = [[RSDrug alloc]init]; 
    [drugArray insertObject:drug atIndex:0]; 

    if (indexPath.row == 0) { 
     [indexPaths removeAllObjects]; 

     [indexPaths addObject:[NSIndexPath indexPathForRow:indexPath.row++ inSection:0]]; // here inserting row index=1; 

     [tableViewMenuList insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 
    } 

    [tableView endUpdates]; 
} 
+0

仍然,不工作。我真的不明白爲什麼昨天工作。今天早上我打開我的電腦,再次運行,相同的代碼,不再工作。 – ghysrc

+0

它卡在哪裏?你能提供錯誤/ ecxeption信息.. –