2015-09-28 4 views
-2

Я пытаюсь удалить строку по конкретному индексу, но я получаю эту ошибку. Поскольку он показывает NSArray, но я использую NSMutableArray. Каким-то образом он насильно набирается.[__NSArrayI removeObjectAtIndex:]: непризнанный селектор, отправленный экземпляру

Эти два массива объявлены глобально.

NSArray *contacts; 
NSMutableArray *sortedContacts; 

В методе cellForRowAtIndexPath, я копирую NSMutableArray в NSArray для отображения данных в строках иначе непосредственно с помощью 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. После удаления объекта скопируйте измененный массив в исходный массив 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]; 
Смежные вопросы