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

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/04 12:19