17

私のiphoneプロジェクト(ARCが有効)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];
        }

その配列を空にする方法を誰か教えてもらえますか?

4

6 に答える 6

19

答えはとても簡単です。

最初のケース。
配列を初期化した部分を確認し、NSMutableArray オブジェクトに NSArray を割り当てているかどうか、コードのどこかを確認してください。

2番目のケース。
配列を列挙している間は、配列からオブジェクトを削除することはできません。これにより、クラッシュが発生しますarray has mutated while enumerating

于 2013-05-10T13:36:22.150 に答える
7

エラーメッセージはそれをすべて言います、

[__NSArrayI removeObject:]: unrecognized selector

__NSArrayI は不変配列(NSArray) のコードワードです。これは、調査オブジェクトがNSMutablArrayではなく、NSArrayであることを意味します。

からオブジェクトを追加または削除することはできませんNSArray

コードを確認してください。調査に割り当てNSArrayたか、として再初期化しました NSArray

于 2013-05-10T13:24:00.017 に答える
1

あなたがしていることをすべて取り除き、単にこのようにします

 [surveys removeAllObjects];

あなたが得ているエラーから、配列は NSmutableArray ではなく、通常の配列である可能性があるため、それからオブジェクトを削除できず、そうしようとするとアプリがクラッシュしました

ミュータブルかどうかを初期化した場所を確認してください

私が言ったように、そのすべてを削除し、単純な removeAllObject を使用します

于 2013-05-10T13:28:26.250 に答える
0

Immutable Array で初期化した可能性があります。次のコードを使用します。

NSMutableArray *newArray = [NSMutableArray arrayWithArray: oldArray];

于 2014-02-05T06:36:17.010 に答える