Ios 在swift中创建聊天应用程序的核心数据

Ios 在swift中创建聊天应用程序的核心数据,ios,swift,core-data,relationships,Ios,Swift,Core Data,Relationships,我正在开发一个类似于简单聊天应用程序的应用程序,我需要使用核心数据根据特定用户保存/获取聊天。我现在已经成功地创建了一个模型来保存用户,现在我需要将他们链接到聊天室。 为了保存用户数据,我创建了Entity UserData,下面是我的swift文件 UserData+CoreDataProperties.swift import Foundation import CoreData extension UserData { @NSManaged var firstName: Str

我正在开发一个类似于简单聊天应用程序的应用程序,我需要使用核心数据根据特定用户保存/获取聊天。我现在已经成功地创建了一个模型来保存用户,现在我需要将他们链接到聊天室。 为了保存用户数据,我创建了Entity UserData,下面是我的swift文件

UserData+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?

}
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)")
        }

    }
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?

}
UserData.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?

}
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)")
        }

    }
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?

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

ChatData+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?

}
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)")
        }

    }
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>?
}
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()


域数据库:?比核心数据更容易使用,无需设置任何核心数据样板代码。是的,使用关系@Zhang you还应该提到你来推荐它的领域限制,特别是在没有给出任何提示的情况下,它可能会对所问的问题有什么帮助……我不知道领域限制,我不是这方面的专家,它为我做了工作。我只知道它不像CoreData那样具有iCloud同步功能。我不想对一些我不是专家的东西给出误导性的限制:D同样,这是一个评论,也是一个问题评论,而不是答案:D@Zhang推荐一个不同的工具不是一个有用的评论,除非该工具专门解决了该人的问题。“您并没有表示它确实如此。@汤姆哈林顿当我看一个问题时,我也会想到用户试图达到的最终目标。这个问题可以解释为“我是应用程序开发人员的新手,我想用用户实体和消息实体构建聊天应用程序,但我只听说过CoreData,现在我正在努力让它工作”,或者“我正在构建聊天应用程序,我绝对想使用CoreData,我不想使用其他任何东西”。发帖人的最终目标可能是构建一个简单的聊天应用程序来学习应用程序开发,他是否使用CoreData或Realm来实现这个目标对他来说可能并不重要。因此我的建议。