在 swift 中为聊天应用创建核心数据

Creating core data for chat app in swift

我正在开发一个类似于简单聊天应用程序的应用程序,我需要使用核心数据来 save/fetch 基于特定用户的聊天。我现在已经成功地创建了一个模型来保存用户,现在我需要 link 他们加入他们的聊天。 为了保存用户数据,我创建了实体用户数据,下面是我的 swift 文件

用户数据+CoreDataProperties.swift

import Foundation
import CoreData

extension UserData {

    @NSManaged var firstName: String?
    @NSManaged var userStatus: String?
    @NSManaged var userId: String?
    @NSManaged var userStatus: String?
    @NSManaged var lastName: String?
    @NSManaged var profilePic: String?

}

UserData.swift

class UserData: NSManagedObject {


    convenience init(WithDictionary dict:NSDictionary){


        let appDelegate =  UIApplication.sharedApplication().delegate as! AppDelegate

        let managedContext = appDelegate.managedObjectContext

        let newEntity =  NSEntityDescription.entityForName("UserData", inManagedObjectContext:managedContext)

        // initializer on NSManagedObject class
        self.init(entity: newEntity!, insertIntoManagedObjectContext: managedContext)

        self.userId =  (dict.valueForKey(ID) != nil) && !(dict.valueForKey(ID) is NSNull)
            ? dict.valueForKey(ID) as! String
            : ""

       //similary initializing other variables

        //Saving to database

        do {
            try managedContext.save()

        } catch let error as NSError  {
            print("Could not save \(error), \(error.userInfo)")
        }

    }

我能够使用此 class 成功保存用户列表。现在我已经创建了一个 ChatData 实体,下面是它的结构。

ChatData+CoreDataProperties.swift

import Foundation
import CoreData

extension ChatData {

    @NSManaged var chatId: String?
    @NSManaged var chatOwnerName: String?
    @NSManaged var chatReadStatus: Boolean?
    @NSManaged var chatText: String?
    @NSManaged var chatTimestamp: String?
    @NSManaged var chatType: String?
    @NSManaged var imageData: String?
    @NSManaged var imageUrl: String?

}

现在,对于每个特定用户,我应该能够创建多个对应于特定用户 ID 的 ChatData 对象。我对核心数据没有太多经验。我看过一些关于建立关系的示例,但我仍然不确定它是如何工作的。我需要建立关系吗?如果是这样,我应该怎么做才能让它发挥作用?

你可以这样修改UserData

extension UserData {
   @NSManaged var firstName: String?
   @NSManaged var userStatus: String?
   @NSManaged var userId: String?
   @NSManaged var userStatus: String?
   @NSManaged var lastName: String?
   @NSManaged var profilePic: String?
   @NSManaged var chats: Set<ChatData>?
}

ChatData这样

extension ChatData {
   @NSManaged var chatId: String?
   @NSManaged var chatOwnerName: String?
   @NSManaged var chatReadStatus: Boolean?
   @NSManaged var chatText: String?
   @NSManaged var chatTimestamp: String?
   @NSManaged var chatType: String?
   @NSManaged var imageData: String?
   @NSManaged var imageUrl: String?
   @NSManaged var user: UserData?
}

对应的核心数据模型是UserData到ChatData的一对多关系(部分属性缺失):

显示如何使用两条消息创建用户的一些代码:

let user=userWithName("MyName")
let chat01=chatWithText("How do you doing?")
let chat02=chatWithText("Fine.")
user?.chats=[chat01!,chat02!]
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.saveContext()

func userWithName(name:String) -> UserData? {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let userEntity =  NSEntityDescription.entityForName("UserData", inManagedObjectContext:managedContext)
    let user = NSManagedObject(entity: userEntity!, insertIntoManagedObjectContext: managedContext) as! UserData
    user.firstName=name
    return user
}

func chatWithText(text:String) -> ChatData? {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let chatEntity =  NSEntityDescription.entityForName("ChatData", inManagedObjectContext:managedContext)
    let chat = NSManagedObject(entity: chatEntity!, insertIntoManagedObjectContext: managedContext) as! ChatData
    chat.chatText=text
    return chat
}