【问题标题】:how to implement multiple user on realm database in iOS?如何在 iOS 中的领域数据库上实现多个用户?
【发布时间】:2019-06-03 19:15:46
【问题描述】:

我是编程初学者,尤其是 iOS 开发初学者

目前我正在尝试将领域用作电子商务应用程序中的本地数据库。我有 Realm 的 Product 和 WishList 对象,如下所示

产品:

class Product : Object {

    @objc dynamic var productID : Int = 0
    @objc dynamic var name : String = ""
    @objc dynamic var categoryID : Int = 0
    @objc dynamic var categoryName : String = ""
    @objc dynamic var unitPrice: Double = 0.0
    @objc dynamic var quantityInCart = 0
    @objc dynamic var quantityFromServer = 0
    @objc dynamic var descriptionProduct : String = ""
    @objc dynamic var hasBeenAddedToWishList : Bool = false
    @objc dynamic var hasBeenAddedToCart : Bool = false
    @objc dynamic var isNewProduct : Bool = false
    @objc dynamic var productWeight : String = ""
    @objc dynamic var weightUnit : String = ""
    @objc dynamic var minimumOrderQuantity = 0
    @objc dynamic var maximumOrderQuantity = 0

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

愿望清单:

class WishList : Object {
    var products = List<Product>()
}

我的应用可以更改用户。所以假设用户 A 将一些产品放在心愿单上(用产品填充 WishList 对象),然后他执行注销,

那么它会使用户B的愿望清单对象在用户B登录后已经有了对象。

所以我认为我需要在 Product 和 Wishlist 对象上都插入 userID,并且我还必须删除 Product 对象上的主键。

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

所以当我从领域数据库执行查询或过滤时,我可以根据 productID 和 userID 进行过滤。

我有使用这种方式的正确方法吗?还是有更好的方法?因为我不习惯将 userID 作为 Product 对象的属性,如下面的代码:

class Product : Object {
        @objc dynamic var userID : Int = 0 <--- like this
        @objc dynamic var productID : Int = 0
        @objc dynamic var name : String = ""
        @objc dynamic var categoryID : Int = 0
        @objc dynamic var categoryName : String = ""
        @objc dynamic var unitPrice: Double = 0.0
        @objc dynamic var quantityInCart = 0
        @objc dynamic var quantityFromServer = 0
        @objc dynamic var descriptionProduct : String = ""
      }

class WishList : Object {
        @objc dynamic var userID : Int = 0 <--- and like this
        var products = List<Product>()
    }

通过这种方法,我还将在 Product 对象上拥有具有相同 productID 的“重复”产品数据,但 Product 属性上的 userID 不同

【问题讨论】:

  • 产品不属于用户。它们是共享的静态项目。只有愿望清单是特定于用户的。所以只将用户 ID 添加到愿望清单。

标签: ios swift database realm


【解决方案1】:

您不应将userID 添加到ProductWishlistProduct 应该独立于特定用户,因此它应该与用户没有关系。另一方面,Wishlist 是特定于用户的,但您不必手动查询特定 WishlistuserID 属性,您应该利用 Realm 的内置关系并声明一对-UserWishlist 之间的一个关系(您可以在 WishListUser 上声明关系,两者都可以正常工作)。

因此,您的 Product 定义应保持不变,而其 primaryKey 也应保持不变。您的 Wishlist 应如下所示:

class WishList : Object {
    @objc dynamic var user: User?
    let products = List<Product>()
}

或者,如果您想从用户那里访问特定UserWishList,您可以像这样修改您的User

class User: Object {
    @objc dynamic var wishList: WishList?
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多