Сбой при удалении объектов из NSMutableArray - программирование
Подтвердить что ты не робот

Сбой при удалении объектов из NSMutableArray

В моем проекте iphone (ARC enabled) у меня есть массив nsmuatble, который содержит около 5 управляемых объектов (которые извлекаются из основных данных), и в каком-то сценарии мне нужно удалить все объекты из этого nsmutablearray

Я использовал следующие методы для удаления объектов, но их сбой в обоих случаях с журналом сбоев -[__NSArrayI removeObject:]: unrecognized selector sent to instance 0xa391640

if (surveys && [surveys count]>0)
        {

            [surveys removeAllObjects];
            surveys = [[NSMutableArray alloc]init];
        }

а также я пробовал

if (surveys && [surveys count]>0)
        {
            for(Survey *obj_Survey in surveys)
            {
                [surveys removeObject:obj_Survey];
            }

            surveys = [[NSMutableArray alloc]init];
        }

может ли кто-нибудь сказать мне, как я могу удалить этот массив, любые предложения будут оценены заранее, чем раньше

4b9b3361

Ответ 1

Ответ очень прост.

Для первого случая.
Проверьте часть, в которой вы инициализировали свой массив, и проверьте, где-то через ваш код, если вы назначили NSArray для вашего объекта NSMutableArray.

Во втором случае.
Вы не можете удалять объекты из массива, пока вы перечисляете его. Это приведет к сбою, сказав array has mutated while enumerating

Ответ 2

Это:

[__NSArrayI removeObject:] : unrecognized selector sent to instance 0xa391640

указывает, что ваш массив "опросов" представляет собой NSArray (не изменяемый). Вы уверены, что правильно инициализировали его? Если вы сделаете это по заданию, подобному этому

NSMutableArray* surveys = [someManagedObjectContext executeFetchRequest:request]

массив "опросов" будет иметь тип NSArray, потому что запросы выборки Core Data возвращают NSArrays.

Ответ 3

В сообщении об ошибке говорится все,

[__NSArrayI removeObject:]: unrecognized selector

__ NSArrayI - это кодовое слово для неизменяемого массива (NSArray). Это означает, что объект ваших опросов не NSMutablArray, а NSArray.

Вы не можете добавлять или удалять объекты из NSArray.

Проверьте свой код. Вы назначили NSArray для опросов или вы повторно инициализировали его как NSArray.

Ответ 4

Удалите все, что вы делаете, и просто делайте это

 [surveys removeAllObjects];

Как из ошибки, которую вы получаете, может быть, что Array не является NSmutableArray просто нормальным массивом, поэтому поэтому вы не можете удалить объект из него, и вы пытаетесь это сделать, а приложение получило сбой

проверьте, где вы его инициализировали, если он является Mutable или нет

так как я сказал удалить все это и использовать простой removeAllObject

Ответ 5

Из-за исключения очень очевидно, что в какой-то момент вы назначаете неизменяемый экземпляр для вашего изменяемого массива. Из комментариев я мог понять, что вы сортировали surveys, а отсортированный массив возвращал неизменяемый массив. Тип casting не будет полезен для получения mutableCopy неизменяемого объекта.

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,nil]; 
surveys = (NSMutableArray *) [[[NSMutableArray alloc]initWithArray:surveys ] sortedArrayUsingDescriptors:sortDescriptors];

Вместо этого используйте

[surveys sortUsingDescriptors: @[sortDescriptor1]];

Ответ 6

Возможно, вы инициализировались с помощью неизменяемого массива. Используйте следующий код:

NSMutableArray * newArray = [NSMutableArray arrayWithArray: oldArray];