Json 将核心数据条目标记为收藏夹SWIFTUI

Json 将核心数据条目标记为收藏夹SWIFTUI,json,core-data,swiftui,Json,Core Data,Swiftui,我正在开发一个应用程序,用于存储从在线Json到离线内容的CoreData的帖子。这是一个房地产列表应用程序,用户可以在其中出售和租赁房产 到目前为止,我已经完成了在CoreData中保存fethed列表的工作,但是我无法为现有条目实现“添加到收藏夹”。我使用NSPredicate在不同视图中筛选列表类型 我已经创建了一个实体“列表” 和一个“最喜欢的”实体 我的问题是:如何实现“添加到收藏夹” 选项A:在另一个实体中再次保存“最喜爱”列表 选项B:在“列表”实体中创建另一个“是收藏夹”属性

我正在开发一个应用程序,用于存储从在线Json到离线内容的CoreData的帖子。这是一个房地产列表应用程序,用户可以在其中出售和租赁房产

到目前为止,我已经完成了在CoreData中保存fethed列表的工作,但是我无法为现有条目实现“添加到收藏夹”。我使用NSPredicate在不同视图中筛选列表类型

  • 我已经创建了一个实体“列表”

  • 和一个“最喜欢的”实体

  • 我的问题是:如何实现“添加到收藏夹”

    选项A:在另一个实体中再次保存“最喜爱”列表

    选项B:在“列表”实体中创建另一个“是收藏夹”属性,并将其保存在核心数据中,只要是收藏夹

    //这是我的登录模型.swift

    struct ListingModel:  Hashable, Decodable, Encodable, Identifiable {
        var id : Int
        var title : String
        var category : String
        var name : String
        var image : String
        var publishdate : String
        var saleprice : Int = 0
        var rentprice : Int = 0
        var listingtype : String
        var latitude : Double!
        var longitude : Double!
        
    }
    
    //JSONViewModel.swift
    导入快捷键
    导入CoreData
    类JSONViewModel:ObserveObject{
    @已发布的var清单:[ListingModel]=[]
    //@Published var tags:[tags]=[]
    //正在将Json保存到核心数据。。。
    func saveData(上下文:NSManagedObjectContext){
    listings.forEach{(数据)位于
    let entity=Listing(上下文:contex)
    entity.title=data.title
    entity.name=data.name
    entity.category=data.category
    entity.image=data.image
    entity.publishdate=data.publishdate
    entity.tagline=data.tagline
    entity.content=data.content
    entity.coverimage=data.coverimage
    entity.saleprice=Int64(截断:NSNumber(值:data.saleprice))
    entity.rentprice=Int64(截断:NSNumber(值:data.rentprice))
    entity.phone=data.phone
    entity.email=data.email
    entity.area=Int64(截断:NSNumber(值:data.area))
    entity.rooms=Int64(截断:NSNumber(值:data.rooms))
    entity.beds=Int64(截断:NSNumber(值:data.beds))
    entity.bathrooms=Int64(截断:NSNumber(值:data.bathrooms))
    entity.expires=data.expires
    entity.adresa=data.adresa
    entity.listingtype=data.listingtype
    entity.latitude=Double(截断:NSNumber(值:data.latitude))
    entity.longitude=Double(截断:NSNumber(值:data.longitude))
    }
    //        }
    //一次保存所有挂起的数据
    做{
    尝试contex.save()
    打印(“成功”)
    }
    抓住{
    打印(错误。本地化描述)
    }
    }
    func fetchData(上下文:NSManagedObjectContext){
    让url=”https://... 我的api地址“
    var request=URLRequest(url:url(string:url)!)
    request.addValue(“swiftui2.0”,用于HttpHeaderField:“字段”)
    let session=URLSession(配置:。默认值)
    session.dataTask(with:request){(data,res,_)in
    guard let jsonData=data else{return}
    //检查错误
    let response=res as!HTTPURLResponse
    //按状态代码检查
    如果response.statusCode==404{
    打印(“错误Api错误”)
    }
    //正在获取JSON数据。。
    做{
    让listings=try JSONDecoder().decode([ListingModel].self,from:jsonData)
    DispatchQueue.main.async{
    self.listings=列表
    self.saveData(contex:context)
    }
    }
    抓住{
    打印(错误。本地化描述)
    }
    }
    1.简历()
    }
    //尝试扩展该函数
    func addListingOfAvorites(收藏夹列表:ListingModel){
    addRecordToFavourites(FavoriteListing:FavoriteListing.title)
    }
    func isListingFavorite(FavoriteListing:ListingModel)->Bool{
    如果let=fetchRecord(FavoriteListing:FavoriteListing.title){
    返回真值
    }
    返回错误
    }
    func从收藏夹中删除列表(收藏夹列表:ListingModel){
    RemoveRecordfromFavorites(FavoriteListing:FavoriteListing.title)
    }
    func ToggleFavorite(收藏夹列表:ListingModel){
    if IsListingFavorite(FavoriteListing:FavoriteListing){
    从收藏夹中移除列表(收藏夹列表:收藏夹列表)
    }
    否则{
    AddListingOfAvorites(FavoriteListing:FavoriteListing)
    }
    }
    }
    
    我还创建了扩展JSONViewModel:

    扩展JSONViewModel{ private func addRecordToFavourites(收藏夹列表:字符串){ guard let context=managedContext else{return} 如果let record=fetchRecord(FavoriteListing:FavoriteListing){ 打印(“记录\(记录)已存在”) 返回 } 让entity=NSEntityDescription.entity(forEntityName:“收藏夹”, 在:上下文中)! 让收藏夹=NSManagedObject(实体:实体,插入到:上下文) Favorite.setValue(FavoriteListing,forKeyPath:“FavoriteListing”) 做{ 尝试context.save() } 将let错误捕获为NSError{ 打印(“无法保存.\(错误),\(错误.用户信息)”) } self.changed=true } private func fetchRecord(FavoriteListing:String)->Favorite{ guard let context=managedContext else{return nil} let request=NSFetchRequest(entityName:“收藏夹”) request.predicate=NSPredicate(格式:“FavoriteListing==%@”,FavoriteListing) 如果let users=try?context.fetch(请求){ 如果users.count>0{ 返回用户[0] } } 归零 } 私人职能