2017-02-09 17 views
1

NSUserdefaultsからNSMutableArrayを取得しようとしています。コードは私に例外を与える:シグナルによるコマンドが失敗しました:セグメント違反:11

if let chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid) as? NSMutableArray 

は私にエラーを与える:

if let chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid).mutableCopy() as? NSMutableArray 

その後"Command failed due to signal:Segmentation fault:11"

[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object' 

後、私はコードの下に使用しました。どのような助けていただきありがとうございます、私は他の多くのソリューションを持っていますが、変更可能なコピーを使用するものを得ていない

+0

は'スウィフトCompiler'を変更しようと取得する必要があり問題。 – shallowThought

+0

同じエラーが発生しました – user2702179

+0

エラーメッセージはかなり明確です。ユーザーデフォルトは不変の配列を返し、Swiftでは変更可能なFoundationコレクション型にキャストできません。 Swiftでは 'NSMutable ...'を使わないでください。 – vadian

答えて

0

native swiftを使用してください。Array struct。 varとしてそれを定義することで、それが自動的にMutableオブジェクトを返しませんNSUserDefaultsから直接値を取得

if var chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid) as? [ARRAY_TYPE] { 
    // use the chatUsersJidArray 
} 
+0

NSarrayの場合は項目を削除する必要があります。 – user2702179

+0

Swiftの 'Array'構造体を' variable'として私は答えて示しました)、配列にオブジェクトを追加したり削除したりすることができます@ user2702179 –

-1

変更可能になります。代わりに、 `NONE`の`、高速モジュール全体Optimization`に `最適化Level`かのルートを隔離するために、構成リリース用にビルド - そのためには、mutableCopy

if let chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid) as? NSArray { 
    var arrChatJidMutable = chatUsersJidArray.mutableCopy() 
    //Now you can manipulate this array. Add/Remove/Update 
} 
関連する問題