在 Swift4 中将获取的 XMPPframeWork vCards 保存到 CoreData
Posted
技术标签:
【中文标题】在 Swift4 中将获取的 XMPPframeWork vCards 保存到 CoreData【英文标题】:saving fetched XMPPframeWork vCards into CoreData in Swift4 【发布时间】:2018-08-11 07:05:09 【问题描述】:我能够使用此代码创建和更新 vCard
let xmppvCardStorage = XMPPvCardCoreDataStorage.sharedInstance()
let xmppvCardTempModule = XMPPvCardTempModule.init(vCardStorage:xmppvCardStorage!)
xmppvCardTempModule.activate(self.stream)
xmppvCardTempModule.addDelegate(self, delegateQueue: DispatchQueue.main)
let vCard = DDXMLElement(name: "vCard", xmlns: "vcard-temp")
let vCardTemp = XMPPvCardTemp.vCardTemp(from: vCard)
vCardTemp.nickname = "john"
vCardTemp.jid = XMPPJID(string: "john123@www.example.com")
我还能够使用以下代码获取该 vCard:
let xmppvCardStorage = XMPPvCardCoreDataStorage.sharedInstance()
let xmppvCardTempModule = XMPPvCardTempModule.init(vCardStorage: xmppvCardStorage!)
xmppvCardTempModule.activate(self.stream)
let jID = XMPPJID(string: "john@www.example.com")
xmppvCardTempModule.addDelegate(self,delegateQueue:DispatchQueue.main)
xmppvCardTempModule.fetchvCardTemp(for: jID!, ignoreStorage:false)
如您所见,我正在从服务器获取 vCard。这是通过将ignoreStorage
设置为false
来完成的
我的问题是 XMPPFrameWork 是否支持将检索到的 vCard 存储在 CoreData 中,这样我就不必每次都检索它
【问题讨论】:
【参考方案1】:fetchvCardTemp
仅获取给定 JID 的 vCardTemp(如果它不在存储中)。当您将 ignoreStorage
设置为 false 时,您是在说我不想使用存储并且我想通过XMPP 流。
您应该只使用 xmppvCardStorage 和其中一个名为 vCardTempForJID
的函数,然后只需传递您最喜欢的 jID,它就会返回给您
【讨论】:
我将其设置为 false 因为当我将其设置为 true 时没有返回任何内容。另外,我尝试了你所说的,但我没有得到任何东西是我的代码 sn-p:让 xmppvCardStorage= XMPPvCardCoreDataStorage.sharedInstance() xmppvCardStorage?.vCardTemp(for: jid, xmppStream: self.stream)。我的问题是 vCard 是否在检索时自动存储在 coreData 中,还是我必须将其保存在 XMPPvCard.xcdatamodeld 中 没有 XMPPFramework 在内部实现 coreData 但你可以自己实现它但不需要那个。在vCardTempForJID
有一个参数调用shouldFetch
你应该将它设置为true。因为在第一次尝试它是空的,框架必须通过网络获取它,但填充后你可以在任何地方使用它
感谢它工作得很好,只是一个快速的事情。如果 vcard 现在存储在我的 coreData 文件中。将忽略存储设置为 true 时,fetchVcard 方法不应该工作。如果不是这样,那么 fetchVcard 的用途是什么。谢谢
我不明白你的意思。ignoreStorage
如果你想让 fetchVcard 什么都不做,应该设置为 false。fetchVcard 的使用是当你不确定 vCard 是否更新时,你可以通过xmppStream
我的问题是我可以使用这个方法 fetchvCardTemp(for: jID!, ignoreStorage:false) 而不是 vCardTempForJID 方法。据我了解 fetchvCardTemp(for: jID!, ignoreStorage:false) 方法可以让用户检查 vcard 是否在存储中以上是关于在 Swift4 中将获取的 XMPPframeWork vCards 保存到 CoreData的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 4 iOS 中将 Callkit 与 Agora VOiP 集成?
在 tableview 单元格中获取 coredata (swift4)
当我在 Xcode 11 中将 swift 4.2 转换为 swift 5 时继续加载
使用 alamofire 和 Swift4 IOS 获取 XML HTTP url 的响应