1
我正在做一個聊天應用程序,我在這裏爲每個聊天存儲聊天時間,現在我需要先顯示最新的聊天信息,分組在部分中,例如:如果我今天有10個聊天記錄它應該在2016年7月10日的部分,最後一次發送聊天。爲此,我正在通過chatTimestamp對列表進行排序,並且我還有另一個存儲相應日期的sectionDate字段。以下是核心數據中顯示的示例數據格式。NSFetchedResultsController中的排序部分問題
<MyChat.ChatData: 0x7f8b71cdd190> (entity: ChatData; id: 0xd000000000140002 <x-coredata:….> ; data: {
chatDeviceType = ipad;
chatId = 3557;
chatOwnerName = 「John Mathew」;
chatReadStatus = 1;
chatStatus = Received;
chatText = 「Hi how are you?「;
chatTimestamp = "2015-09-21 10:41:37 +0000";
chatType = Mine;
imageData = nil;
imageUrl = nil;
sectionDate = "Sep 21, 2015";
users = "0xd000000000080000 <x-coredata:…>」;
})
這也是迄今爲止
var fetchedResultsController: NSFetchedResultsController = NSFetchedResultsController()
override func viewDidLoad() {
super.viewDidLoad()
setupFRC(limit: LIMIT)
......
}
func setupFRC(limit limit:Int) {
messageMaxLimit += limit
let objectsCount = self.stack.mainContext.countForFetchRequest(fetchRequest(self.stack.mainContext), error: nil)
NSFetchedResultsController.deleteCacheWithName("Root")
let request = self.fetchRequest(self.stack.mainContext)
self.fetchedResultsController = NSFetchedResultsController(fetchRequest: request,
managedObjectContext: self.stack.mainContext,
sectionNameKeyPath: "sectionDate",
cacheName: "Root")
self.fetchedResultsController.delegate = self
self.messageMaxLimit = self.messageMaxLimit > objectsCount ? objectsCount : self.messageMaxLimit
if objectsCount > self.messageMaxLimit
{
self.fetchedResultsController.fetchRequest.fetchOffset = objectsCount - self.messageMaxLimit
}
self.fetchData()
}
//To fetch data in FRC
func fetchData() {
do {
try self.fetchedResultsController.performFetch()
chatCollectionView.reloadData()
} catch {
assertionFailure("Failed to fetch: \(error)")
}
}
func fetchRequest(context: NSManagedObjectContext) -> FetchRequest<ChatData> {
let e = entity(name: "ChatData", context: context)
let fetch = FetchRequest<ChatData>(entity: e)
fetch.predicate = NSPredicate(format: "(SELF.users == %@)", currentUser!)
//Sort by chatTimeStamp
let sortDescriptor = NSSortDescriptor(key: "chatTimestamp", ascending: true)
fetch.sortDescriptors = [sortDescriptor]
return fetch
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
do {
try self.fetchedResultsController.performFetch()
} catch {
assertionFailure("Failed to fetch: \(error)")
}
chatCollectionView.reloadData()
}
一個我的代碼部分現在的問題是,聊天,似乎有正確順序,但部分是按字母順序。但是,如果我輸入聊天併發送它,並從controllerDidChangeContent重新加載它會得到更正。 我無法弄清楚它爲什麼最初不以正確的順序加載。我正在使用一個集合視圖。我在這裏做錯了什麼?