2012-03-01 138 views
0

我有這樣的代碼從數據庫的UITableView編輯惑

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [appDelegate.indexArray removeObjectAtIndex:indexPath.section]; 
     [appDelegate.notesArray removeObjectAtIndex:indexPath.section]; 
     [tableViewObj reloadData]; 
     NSString *DataPath = [MyBibleAppAppDelegate getPath]; 
     [appDelegate.data writeToFile:DataPath atomically:YES]; 
     [tableViewObj reloadData]; 
    } 
} 

它完美的作品刪除單元格的內容,但我需要把上面的代碼在我按一下按鈕,我把這個按鈕點擊

-(IBAction)_clickbtndeltNoteall:(id)sender 
{ 
      [appDelegate.indexArray removeObjectAtIndex:indexPath.section]; 
      [appDelegate.notesArray removeObjectAtIndex:indexPath.section]; 
      [tableViewObj reloadData]; 
      NSString *DataPath = [MyBibleAppAppDelegate getPath]; 
      [appDelegate.data writeToFile:DataPath atomically:YES]; 
      [tableViewObj reloadData]; 
} 

但我得到這個錯誤:「未聲明的標識符索引路徑」。如何解決這個問題?

+0

挑戰你會得到這樣的感覺。在.h文件中採用一個NSIndexPath對象,並在commitEditingStyle方法中賦值並在你的按鈕動作方法中使用該對象 – Narayana 2012-03-01 10:26:03

回答

1

我建議保存在單身按下行的indexPath。以下是如何使用singleton class來存儲對象並跨類使用它們的指南。

在這個例子中,你也可以聲明一個實例變量,並在你的UITableView的合適的代理方法中按下該行時進行設置。可以這樣做,像這樣:

@interface 

NSIndexPath *tableViewPath; 

@implementation 

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

tableViewPath = indexPath; 

} 

您爲您的按鈕動作現在應該是這樣的:

- (IBAction)_clickbtndeltNoteall:(id)sender 
{ 
     [appDelegate.indexArray removeObjectAtIndex:indexPath.section]; 
     [appDelegate.notesArray removeObjectAtIndex:indexPath.section]; 
     [tableViewObj reloadData]; 
     NSString *DataPath = [MyBibleAppAppDelegate getPath]; 
     [appDelegate.data writeToFile:DataPath atomically:YES]; 
     [tableViewObj reloadData]; 
} 

該按鈕的代碼假定行已選定在它被按下之前。你也可以初始化indexPathviewDidLoad中 像這樣:

@implementation 

- (void)viewDidLoad { 

tableViewPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

} 

你應該調整你的初始化什麼是適合您的具體方案!

1

單擊按鈕時,您想要刪除哪個單元格?

地址:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowToDelete inSection:sectionToDelete]; 

在你的方法頂部。

+0

這顯然不是一個好的解決方案,因爲它不確定哪一行需要刪除?另外一個NSIndexPath的本地聲明是一個壞主意。應該爲此使用一個實例變量。 – wizH 2012-03-01 11:22:39

+0

你的意思是他應該在他的控制器上保留一個NSIndexPath實例,以知道要刪除哪個索引?我同意他不需要NSIndexPath,但我可以向你保證一個實例變量不應該用於這個。 – fbernardo 2012-03-01 11:26:12

+0

如果他想保留整個班級的排名索引,我猜這會是理想的嗎? – wizH 2012-03-01 11:28:10

1

indexPath沒有在_clickbtndeltNoteall中定義,這就是爲什麼你會得到這個錯誤。

你可以做這樣的事情

-(IBAction)_clickbtndeltNoteall:(id)sender 
{ 
     [appDelegate.indexArray removeObjectAtIndex:index]; 
     [appDelegate.notesArray removeObjectAtIndex:index]; 
     [tableViewObj reloadData]; 
     NSString *DataPath = [MyBibleAppAppDelegate getPath]; 
     [appDelegate.data writeToFile:DataPath atomically:YES]; 
     [tableViewObj reloadData]; 
} 

其中index定義別的地方(例如類字段)。您可以使用一個輔助的方法來設置index指定要刪除的部分,然後調用_clickbtndeltNoteall

0

您正在訪問的indexPath可變的內部 - (IBAction爲)_clickbtndeltNoteall:(ID)發送者,這是不可能的,因爲該變量不存在於該範圍內。

爲什麼你不把最後一個indexPath存儲在一個全局變量中,然後你可以訪問它?事情是這樣的:

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

     if (editingStyle == UITableViewCellEditingStyleDelete) {  
     lastIndexPath = indexPath; 
     //Your code 
     } 
} 

而在你interfaz聲明,你就把:

NSIndexPath *lastIndexPath; 
0
-(IBAction)_clickbtndeltNoteall:(id)sender 
{  
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview]; 
    NSIndexPath *clickedButtonPath = [tableViewObj indexPathForCell:clickedCell]; 
    int section1=clickedButtonPath.section; 
[appDelegate.indexArray removeObjectAtIndex:section1]; 
      [appDelegate.notesArray removeObjectAtIndex:section1]; 
      [tableViewObj reloadData]; 
      NSString *DataPath = [MyBibleAppAppDelegate getPath]; 
      [appDelegate.data writeToFile:DataPath atomically:YES]; 
      [tableViewObj reloadData]; 
} 

如果按鈕是對細胞itself..If按鈕時,它一定會努力不上cell然後你可以直接通過indexpath沒有指定uitableviewcell ...試試吧..