2016-07-01 11 views
1

この問題は多分下にリストされていますが、私のシナリオに合ったものは見えません。お気に入りに/から音楽を追加、削除する機能があります。私は最初にそれを追加して、それを削除することもできます。しかし、私は再びそれを追加します。ブーム!!!誰か助けてください。ありがとうございました!以下にスローされオブジェクトが削除されたか無効にされました

エラー:

***キャッチされない例外により「RLMException」にアプリを終了、理由:「レルムへの削除または無効化されたオブジェクトの追加が許可されていない」

私を助けてくださいレビューコード以下:

func addMusicToFavorite(music: Music) { 
    let realm = try! Realm() 

    try! realm.write { 
     realm.add(music) 
    } 

} 

func removeMusicFromFavorite(music: Music) { 
    //Tips: '\(musics.mId)' : put quote ' ' like this means String, if not it will treat it as Int 
    let realm = try! Realm() 
    let tmpMusic = realm.objects(Music.self).filter("_mId == '\(music.mId)'") 
    try! realm.write { 
     print("remove \(music.mId)") 
     realm.delete(tmpMusic) 
    } 
} 

マイミュージックモデル:

class Music: Object { 

private dynamic var _mId: String! 
private dynamic var _mTitle: String! 
private dynamic var _mArtist: String! 
private dynamic var _mThumbnail: String! 
private dynamic var _mAlbumImg: String! 
private dynamic var _mPath: String! 
private dynamic var _mNumOfView: String! 
private dynamic var _mDuration: String! 

var mId: String { 
    return _mId 
} 

var mTitle: String { 
    return _mTitle 
} 

var mArtist: String { 
    return _mArtist 
} 

var mAlbumImg: String { 
    return _mAlbumImg 
} 

var mThumbnail: String { 
    return _mThumbnail 
} 

var mPath: String { 
    return _mPath 
} 

var mNumOfView: String { 
    return _mNumOfView 
} 

var mDuration: String { 
    return _mDuration 
} 

required init() { 
    super.init() 
} 

required init(realm: RLMRealm, schema: RLMObjectSchema) { 
    super.init(realm: realm, schema: schema) 

//致命( "INIT(レルム:実装されていない:)スキーマ") }

required init(value: AnyObject, schema: RLMSchema) { 
    super.init(value: value, schema: schema) 

//致命( "INIT(値:実装されていない:)スキーマ") }

override static func primaryKey() -> String? { 
    return "_mId" 
} 


convenience init(dict: Dictionary<String, AnyObject>) { 
    self.init() 

    if let id = dict["id"] as? String { 
     self._mId = id 
    } 

    if let titleAndArtist = dict["music_title"] as? String { 
     let tmp = Utils.instance.splitStringsWithCharacter(titleAndArtist) 
     self._mTitle = tmp.title 
     self._mArtist = tmp.artist    
    } 

    if let thumbnail = dict["image_thumb"] as? String { 
     self._mThumbnail = thumbnail 
    } 

    if let albumImg = dict["image_album"] as? String { 
     self._mAlbumImg = albumImg 
    } 

    if let path = dict["music_path"] as? String { 
     self._mPath = path 
    } 

    if let numOfView = dict["music_view"] as? String { 
     self._mNumOfView = numOfView 
    } 

    if let duration = dict["music_duration"] as? String { 
     self._mDuration = duration 
    } 

} 

}だけ答えとしてレコードの

+0

'Music'オブジェクトのモデルを表示できますか? – xoudini

+0

こんにちはxoudini、あなたのコメントありがとう、音楽のモデルを追加した私の編集した質問を確認してください...ありがとう! – GaaraMadara

+0

"Boom !!!"で評価できますか? ;)レルムはエラーを投げますか?アプリは終了しますか? – HAS

答えて

3

は、すべてのコメント内のビットを埋めている:あなたはレルムから削除したら、あなたはadd同じオブジェクトインスタンスを再することはできません。

realm.addは、指定されたオブジェクトを保持します。このようなオブジェクトのプロパティは、この呼び出しの後、単純なメモリではなくディスク上のデータベースで直接管理されます。

ただし、アンマネージオブジェクトを保持し、realm.create(object)を使用してレルム内にコピーを作成すると、そのように作成されたオブジェクトを削除した後でも、それを繰り返すことができます。

+0

ありがとうマリウス... :) – GaaraMadara

関連する問題