получение потока 1: EXC_BAD_ACCESS (код = 1, адрес = 0x11) по запросу области в swift - PullRequest
0 голосов
/ 03 марта 2019

У меня есть две модели (Пользователь и Проект), как показано ниже:

class User: Object {    // Users that logged in app in specific device atleast once
    @objc dynamic var serverId: Int = 0
    @objc dynamic var firstName: String = ""
    @objc dynamic var lastName: String = ""
    @objc dynamic var email: String?
    @objc dynamic var company: String?
    @objc dynamic var phoneNumber: String = ""
    @objc dynamic var syncBaseTime: String = ""

    let projects = LinkingObjects(fromType: Project.self, property: "user")

    convenience init(_serverId: Int, _firstName: String, _lastName: String, _phoneNumber: String) {
        self.init()

        self.serverId = _serverId
        self.firstName = _firstName
        self.lastName = _lastName
        self.phoneNumber = _phoneNumber
    }

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

class Project: Object {
    @objc dynamic var serverId: Int = 0
    @objc dynamic var name: String = ""
    @objc dynamic var stateId: Int = 0
    @objc dynamic var stateName: String = ""
    @objc dynamic var cityId: Int = 0
    @objc dynamic var cityName: String = ""

    @objc dynamic var user: User?
    @objc dynamic var isOwner: Bool = false
    @objc dynamic var isActive: Bool = false
    @objc dynamic var compoundKey: String = ""
    @objc dynamic var syncDetailTime: String = ""

    let accountTitles = LinkingObjects(fromType: AccountTitle.self, property: "project")
    let notes = LinkingObjects(fromType: Note.self, property: "project")

    convenience init(_serverId: Int, _name: String, _stateId: Int, _stateName: String,
                 _cityId: Int, _cityName: String, _user: User, _isOwner: Bool, _isActive: Bool) {
        self.init()

        self.serverId = _serverId
        self.name = _name
        self.stateId = _stateId
        self.stateName = _stateName
        self.cityId = _cityId
        self.cityName = _cityName

        self.user = _user
        self.isOwner = _isOwner
        self.isActive = _isActive
        self.compoundKey = "\(self.user!.serverId)-\(self.serverId)"
    }

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

проблема возникает, когда я хочу выполнить этот запрос для них и получить проекты, над которыми работает текущий пользователь, но это не так.в настоящее время выбрано:

self.realm.objects(Project.self).filter(NSPredicate(format: "user.serverId == %@ && isActive == true && serverId != %@", self.currentUser.serverId, self.currentProject.serverId))

Я получаю эту ошибку без дополнительной информации от Xcode:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x11)

, и я не смог найти, где моя ошибка, и я буду признателен за любую помощь с этим.

1 Ответ

0 голосов
/ 03 марта 2019

Вы используете неправильный спецификатор в строке формата, %@ равен только для объектов, а Int не является объектом в терминах NSPredicate

Использовать %ld для Int

self.realm.objects(Project.self).filter(NSPredicate(format: "user.serverId == %ld && isActive == true && serverId != %ld", self.currentUser.serverId, self.currentProject.serverId))

Примечание. Это Swift.Пожалуйста, не используйте уродливые target-c-ish имена переменных со стартовыми символами подчеркивания.self.name = name компилирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...