[英]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.