在 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
}
我正在开发一个类似于简单聊天应用程序的应用程序,我需要使用核心数据来 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
}