29330


現在Realmを使ってデータベースから値を取得しようとしているのですが、「EXC_BAD_ACCESS」エラーが出て取得できません。「EXC_BAD_ACCESS」は以下のコードのreturn文で表示されています。

[code]

    public func objects<T: Object>(_ type: T.Type) -> Results<T> {
        return Results<T>(RLMGetObjects(rlmRealm, (type as Object.Type).className(), nil))
    }
    
[/code]

エラーに関わる範囲のコードを下記に記載します。

[code]

    // 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
        }
    }
    
[/code]

ちなみにモデルクラスは以下のようになっています。

[code]

    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"
        }
    
    }
    
[/code]

なぜ値を取得できないのでしょうか？  
個人的にはバージョンに何か問題があるような気がしているのですが......。  
Swiftのバージョンは3.0で、Realmのバージョンは2.0.0で、iOSのバージョンは10.0.1です。  
どなたかわかる方がいれば教えていただきたいです。よろしくお願いします。


CC BY-SA 3.0
2016-10-01T02:21:22.523
29274
2016-10-03T23:34:03.747
5210
question
swift ios realm
Realmでデータベースから値を取ろうとすると「EXC_BAD_ACCESS」のエラーが表示される


Realmの問題なのかSwiftの問題なのかわかりませんが、プロジェクト名に漢字やカタカナが含まれていることが問題のようです。

[![画像の説明をここに入力](https://i.stack.imgur.com/T22Fw.png)](https://i.stack.imgur.com/T22Fw.png)

上のスクリーンショットのようにXcodeの機能でプロジェクト名をリネームできますので（関連して必要な変更を自動的にしてくれる）、プロジェクト名をアルファベットのみにするなど変更して使ってください。

Realmの問題かどうかはこれから深く調査します。教えていただいてありがとうございました。


CC BY-SA 3.0
2016-10-03T23:34:03.747
29330
2016-10-03T23:34:03.747
5519
29274
answer