2015-09-28 128 views
-2

我想刪除特定索引處的行,但出現此錯誤。因爲它顯示NSArray,但我使用NSMutableArray。不知怎的,它強制類型鑄造。[__NSArrayI removeObjectAtIndex:]:發送到實例的無法識別的選擇器

這兩個數組是全局聲明的。

NSArray *contacts; 
NSMutableArray *sortedContacts; 

在的cellForRowAtIndexPath方法,我在NSArray中複製的NSMutableArray以顯示其它方式直接使用的NSMutableArray行的數據,鍵值錯過。

contacts = [sortedContacts copy]; 

這是我在行上的按鈕,按下它,我想刪除所有包含數據的行。

-(void)CancelButtonClicked:(UIButton*)sender 
{ 
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition]; 
    [sortedContacts removeObjectAtIndex:indexPath.row]; 
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    [self.tableView reloadData]; 
} 
+0

@Larme雖然他沒有在聯繫人上調用removeObjectAtIndex。 – dasblinkenlight

+0

@dasblinkenlight:好點。我現在的問題是哪條線確實導致了崩潰。 – Larme

+1

@Larme我相當肯定這是調用'[sortedContacts removeObjectAtIndex:indexPath.row]',但是在'NSArray'被分配給一個變量時,該變量應該保存對可變數組的引用。 – dasblinkenlight

回答

0

我找到了這個解決方案。複製NSMutableArray中的sortedconacts。之後,刪除對象,將修改後的數組複製到原始sortedcontacts數組中。 :)

-(void)CancelButtonClicked:(UIButton*)sender 
    { 
    NSMutableArray *copy=[sortedContacts mutableCopy]; 
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition]; 

    [copy removeObjectAtIndex:indexPath.row]; 
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    [self.tableView reloadData]; 
    sortedcontacts=[copy mutableCopy]; 
    } 
+1

我正在發佈相同的解決方案....現在有同樣的崩潰儀式,並解決它做類似的事情...:p – Rumin

+0

我不知道,有人報告我的問題是消極的。這是非常重要的問題,許多人以類似的方式解決問題。請幫助我,否則我會被阻止。 – WasimSafdar

+0

我低估了你的答案,因爲這是一個荒謬的解決方案,不應該鼓勵。你應該確保'sortedContacts'一旦創建就可以改變,並且在處理按鈕按下時不會這樣做。這是一個對自己的代碼失去控制權的人的巨大破壞。 – Droppy

0

這只是簡單的靈魂如果你想刪除數組索引的第一個對象,而不是添加這行代碼。

data = [[dicsResponse valueForKey:@"data"]mutableCopy]; 

[data removeObjectAtIndex:0]; 
相關問題