2016-03-03 2 views
2

Я разрабатываю приложение, похожее на простое приложение для чата, и мне нужно использовать основные данные для сохранения/выборки чатов на основе конкретного пользователя. Теперь я успешно создал модель для сохранения пользователей, теперь мне нужно связать их с их чатами. Для сохранения пользовательских данных я создал 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? 

} 

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

    } 

Я был в состоянии для успешного сохранения списка пользователей с помощью этого класса. Теперь я создал объект 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? 

} 

Теперь для каждого конкретного пользователя, я должен быть в состоянии создать несколько объектов ChatData, соответствующих конкретному USERID. У меня нет большого опыта работы с основными данными. Я рассмотрел некоторые примеры создания отношений, но я все еще не уверен, как это работает. Нужно ли мне создавать отношения? Если да, то как мне это сделать, чтобы сделать эту работу?

+0

Попробованная базы данных царств: http://realm.io/? Гораздо проще в использовании, чем Core Data, нет необходимости в настройке кода шаблонов Core Data. – Zhang

+1

Да, используйте отношения. @Zhang, вы также должны указать ограничения в области, о которых вы пришли, чтобы порекомендовать его, в частности, не указав на то, как это может помочь в заданном вопросе ... – Wain

+0

Я не знаю ограничений в области, я не эксперт в этом, он делает работу для меня. Единственное, что я знаю, это отсутствие синхронизации iCloud, например, CoreData. Я не хочу вводить вводящие в заблуждение ограничения в отношении того, что я не эксперт: D Кроме того, это комментарий, а также вопрос-комментарий, а не ответ: D – Zhang

ответ

2

Вы можете изменить 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? 
} 

Соответствующая модель ядра данных имеет releationship один-ко-многим из UserData в ChatData (некоторые атрибуты отсутствуют):

enter image description here

Некоторый код, который показывает, как вы можете создать пользователя с двумя сообщениями:

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 
} 
Смежные вопросы