簡體   English   中英

從多對多關系核心數據中獲取單個實體iOS

[英]Fetching single entity from to-many relationship core data iOS

我有這樣的數據模型:

Conversation<---->>Message

我已將上述兩個實體的類創建為:

Conversation {
    @NSManaged var messages: NSSet?
}

我有Conversation對象,我正在使用NSFetchedResultsController來獲取所有對話並將它們顯示在屏幕上。

如果我想從該對話中獲得特定消息,那么哪種方式會更好

(我在Conversation中有獲取特定消息的方法,下面是方法的內容)

1 獲取請求

func getParticularMessage(uid: String) -> Message {
    let pred = NSPredicate(format: "conversation == %@ AND uid == %@", self, uid)
    let entity = NSEntityDescription.entityForName("Message", inManagedObjectContext: moc)
    let fetchRequest = NSFetchRequest()
    fetchRequest.entity = entity!
    fetchRequest.predicate = pred

    do{
        let results = try moc.executeFetchRequest(fetchRequest)
        return results.first as! Message
    } catch {
        let resultError = error as NSError
        DDLogError(resultError.localizedDescription)
    }

}

2 遍歷NSSet

func getParticularMessage(uid: String) -> Message {
    for msg in messages {
      let singleMsg = msg as! Message
      if singleMsg.uid == uid {
         //this is the message which we want
         return singleMsg
      }
    }
}

更新

假設這個getParticularMessage方法在應用程序運行時經常被調用(分鍾 10 次)。

這個頻率是因為應用程序是聊天應用程序,當我們發送任何消息並獲取傳遞狀態時,它會調用讀取狀態。

由於用戶可以在一分鍾內頻繁發送消息,因此該方法可以被頻繁調用。

你的代碼很危險,因為你不知道你會找到一個返回的結果,如果你不知道,你將返回 nil 和/或嘗試解包它。

在某些方面,效率取決於數據庫有多大、會話中有多少消息以及其中有多少已加載到內存中。

通常獲取會更好,您的另一個選項要求將所有對象加載到內存中。 如果您知道它們已經加載到內存中(沒有出現故障),那么循環應該更快......

最后,你現在不應該關心。 如果您發現問題,則應根據對一般使用條件和極端情況的分析進行測試以找出問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM