2012-07-10 46 views
1

我定義的成員如下:我想記住以後刪除(NSIndexPath *)indexPath,但墜毀

@property (nonatomic, retain) NSIndexPath *deletingIndexPath; //記錄當前需要刪除的行 

,併爲其分配在

- (void)tableView:(UITableView *)atableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    deletingIndexPath = indexPath; 
    ... 
} 

而在另一個回調使用功能

NSArray *deleteIndexPaths = [NSArray arrayWithObjects:deletingIndexPath,nil]; 
[self.tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade]; 

它崩潰...

模擬器中它說

2012-07-10 16:56:54.887 p[20972:16a03] *** Assertion failure in -[NSIndexPath row], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableViewSupport.m:2606 
2012-07-10 16:56:54.898 p[20972:16a03] Uncaught exception: Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible. 

誰能告訴我爲什麼?

回答

2

你在ARC嗎?如果不是,你必須保留你的實例。你可以使用它之前分配的那個是autoreleased。您可以使用self.deletingIndexPath = indexPath;,以便實例將由屬性保留

+0

deletesIndexPath = indexPath;和self.deletingIndexPath = indexPath;是不同的?上帝,我忘了它。謝謝。 – jeswang 2012-07-10 09:44:12

+0

是的,它不同。當你做deleteIndexPath = indexPath;你只需分配實例的C地址。它稍後會自動發佈。但是,當你做self.deletingIndexPath = indexPath;你使用之前定義的retain屬性。 – Aymarick 2012-07-10 09:47:18

+0

再次感謝您。我記得這一次。 – jeswang 2012-07-10 09:50:45