Я знаком с Sqlite, но решил попробовать использовать мир для моего следующего проекта. У меня возникли проблемы с чтением данных из db и удалением объектов .Использование Realm with swift
Я использую путь области по умолчанию:
let realm = RLMRealm.defaultRealm()
При нажатии кнопки RLMObject должны либо быть добавлены или удалены (если уже есть). Это IBAction для кнопки:
@IBAction func addToFavor(sender: UIBarButtonItem) {
// Create RealmTV (RLMObject)
let tvShow = RealmTV(id: id, title: TitleLabel.text!, posterPath: posterUrl)
if favoriteButton.image!.isEqual(UIImage(named: "Favor unfilled")) {
realm.beginWriteTransaction()
// Create or update tv-show in database
RealmTV.createOrUpdateInDefaultRealmWithValue(tvShow)
try! realm.commitWriteTransaction()
// Change button state
favoriteButton.image = UIImage(named: "Favor filled")
}
else
{
realm.beginWriteTransaction()
// Delete tv-show object from database
realm.deleteObject(tvShow) /* RLMException here */
try! realm.commitWriteTransaction()
// Change button state
favoriteButton.image = UIImage(named: "Favor unfilled")
}
}
При попытке удалить объект после того, как он был добавлен к БД. Я получаю сообщение RLMExecption:
'Удаляется только объект из области, к которой принадлежит.'
Я понимаю, что означает вышеуказанная причина, но не как ее решить?
А также как получить только этот объект из db после его добавления?
EDIT
Это мой RealmTv класс:
import UIKit
import Realm
class RealmTV: RLMObject {
dynamic var id = ""
dynamic var title = ""
dynamic var posterPath = ""
override class func primaryKey() -> String? {
return "id"
}
override init() {
super.init()
}
init(id: String, title: String, posterPath: String) {
super.init()
self.id = id
self.title = title
self.posterPath = posterPath
}
}
Я вижу, что вы используете Realm Objective-C интерфейс от Swift. В большинстве случаев рекомендуется использовать Realm Swift в приложениях Swift. Вы делаете это, потому что вам нужно запускать iOS 7 или получить доступ к вашим моделям Realm от Swift и Objective-C? – bdash
Мне нужна поддержка iOS 7+, поэтому я подумал, что нужно будет использовать интерфейс Objective-C – Mat0