Realmでデータベースから値を取ろうとすると「EXC_BAD_ACCESS」のエラーが表示される
現在Realmを使ってデータベースから値を取得しようとしているのですが、「EXC_BAD_ACCESS」エラーが出て取得できません。「EXC_BAD_ACCESS」は以下のコードのreturn文で表示されています。
public func objects<T: Object>(_ type: T.Type) -> Results<T> {
return Results<T>(RLMGetObjects(rlmRealm, (type as Object.Type).className(), nil))
}
エラーに関わる範囲のコードを下記に記載します。
// MARK: - IBAction
@IBAction func addNewUser(_ sender: AnyObject) {
self.showAddNewUserAlert()
}
// MARK: - alertController
func showAddNewUserAlert() {
let alert:UIAlertController = UIAlertController(title:"登録", message: "名前を入力してね", preferredStyle: UIAlertControllerStyle.alert)
okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:{ (action:UIAlertAction!) -> Void in
let textField = alert.textFields![0]
if self.checkHasSameUserNameInDatabase(textField.text!) { //エラーが出るメソッド
let user = User()
user.name = textField.text!
UserManager.sharedManager.insertUser(user)
UserManager.sharedManager.users.append(user)
let indexPath = IndexPath(row: UserManager.sharedManager.users.count - 1, section: 0)
self.tableView.insertRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
} else {
self.showFailureAlert()
}
})
let cancelAction:UIAlertAction = UIAlertAction(title: "キャンセル",
style: UIAlertActionStyle.cancel, handler:{
(action:UIAlertAction!) -> Void in
})
okAction.isEnabled = false
alert.addAction(cancelAction)
alert.addAction(okAction)
alert.addTextField(configurationHandler: {(text:UITextField!) -> Void in
text.placeholder = "名前"
text.delegate = self
})
present(alert, animated: true, completion: nil)
}
func checkHasSameUserNameInDatabase(_ name: String!) -> Bool {
let realm = try! Realm()
let predicate = NSPredicate(format: "name = %@", name)
let users = realm.objects(User.self).filter(predicate) //ここでエラーが出る
if users.count == 0 {
return false
} else {
return true
}
}
ちなみにモデルクラスは以下のようになっています。
class User: Object {
dynamic var id = UUID().uuidString
dynamic var name: String!
dynamic var score = 0
dynamic var characterName = "赤ちゃん"
override class func primaryKey() -> String {
return "id"
}
}
なぜ値を取得できないのでしょうか?
個人的にはバージョンに何か問題があるような気がしているのですが......。
Swiftのバージョンは3.0で、Realmのバージョンは2.0.0で、iOSのバージョンは10.0.1です。
どなたかわかる方がいれば教えていただきたいです。よろしくお願いします。