iPhone: получено предупреждение при обращении NSMutablearray - PullRequest
3 голосов
/ 16 марта 2012

Мне нужен обратный (сортировка в порядке убывания) NSMutablearray. Я попробовал следующий код, и он работает, но получил предупреждение.Как я могу удалить предупреждение?

NSMutablearray *resStatusArray;

[resStatusArray sortUsingSelector:@selector(compare:)];

    resStatusArray=[[resStatusArray reverseObjectEnumerator] allObjects];
Warning:Incompitable pointer types assigning to 'NSMutablearray*_strong' from ' NSarray *'

Ответы [ 4 ]

7 голосов
/ 16 марта 2012

user1118321 правильно в объяснении.Чтобы это исправить, вы должны создать новый изменяемый массив.Я подозреваю, что это безопаснее, чем актеры.

resStatusArray = [NSMutableArray arrayWithArray:[[resStatusArray reverseObjectEnumerator] allObjects]];
4 голосов
/ 16 марта 2012

Метод allObjects возвращает NSArray*, а не NSMutableArray*, поэтому компилятор сообщает вам, что ваше присвоение переменной NSMutableArray* неверно.

0 голосов
/ 03 октября 2013

Установите его равным:

[NSMutableArray arrayWithArray:[[arrayNameToReverse reverseObjectEnumerator] allObjects]];

По сути, это создание нового массива из старого изменяемого массива, но в обратном порядке. Причина, по которой это работает, заключается в том, что NSMutableArray является подклассом NSArray. Итак, ваш код для обратного массива будет:

resStatusArray = [NSMutableArray arrayWithArray:[[resStatusArray reverseObjectEnumerator] allObjects]];
0 голосов
/ 16 марта 2012

Если вы уверены, что делаете, вы можете использовать приведение:

resStatusArray=(NSMutableArray*_strong)[[resStatusArray reverseObjectEnumerator] allObjects];

Однако я сомневаюсь, что это семантически правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...