在iOS中在域中添加数据时出现问题

在iOS中在域中添加数据时出现问题,ios,swift,realm,Ios,Swift,Realm,我是使用领域的新手,我正在尝试将我的api响应保存在领域数据库中。为此,我读取了这些文档并开始了我的工作,我创建了一个对象类,其中有一个变量,当我在realm应用程序中添加数据时,我现在想在其中保存数据,但出现错误,Thread 1:Fatal error:在展开可选值时意外发现nil。这是我的对象类 class SingleChatRealm: Object { var actualNameFor_1_2_1_chat = "" var isGroup : Bool = true var

我是使用领域的新手,我正在尝试将我的api响应保存在领域数据库中。为此,我读取了这些文档并开始了我的工作,我创建了一个对象类,其中有一个变量,当我在realm应用程序中添加数据时,我现在想在其中保存数据,但出现错误,
Thread 1:Fatal error:在展开可选值时意外发现nil
。这是我的对象类

class SingleChatRealm: Object {

var actualNameFor_1_2_1_chat = ""
var isGroup : Bool  = true
var isNewGroup : Bool = false
var lastMessage = ""
var lastMsgRead : Bool = false
var lastMsgTime = ""
var lastMsgTimeActual = ""
var name = ""
var profilePic = ""
var roomSID = ""
var unReadMsgsCount = 0
var twChannelObj : TCHChannel?
var members = [TCHMember]()
var messages = [TCHMessage]()
// @objc dynamic var group_info : [String:JSON]?
} 这就是我在域中存储数据的方式

 let realm = try! Realm()

        try! realm.write {

            let newListing = SingleChatRealm()

            for items in dateWiseSortedSingleRooms
            {
                newListing.actualNameFor_1_2_1_chat = items.actualNameFor_1_2_1_chat
                newListing.isGroup = items.isGroup
                newListing.isNewGroup = items.isNewGroup
                newListing.lastMessage = items.lastMessage
                newListing.lastMsgRead = items.lastMsgRead
                newListing.lastMsgTime = items.lastMsgTime
                newListing.lastMsgTimeActual = items.lastMsgTimeActual
                newListing.members = items.members
                newListing.messages = items.messages
                newListing.name = items.name
                newListing.profilePic = items.profilePic!
                newListing.roomSID = items.roomSID
                newListing.twChannelObj = items.twChannelObj
                newListing.unReadMsgsCount = items.unReadMsgsCount
                print(newListing)
                self.realm.add(newListing)
            }
        }

我的应用程序在这行
self.realm.add(newListing)
上崩溃,上面给出了错误,为什么会这样?这里面我缺了什么

您刚刚创建了一个新的Realm实例,但self.Realm仍然为零,您应该添加一行:

self.realm = realm
您的代码:

let realm = try! Realm()

self.realm = realm

    try! realm.write {

        let newListing = SingleChatRealm()

        for items in dateWiseSortedSingleRooms
        {
            newListing.actualNameFor_1_2_1_chat = items.actualNameFor_1_2_1_chat
            newListing.isGroup = items.isGroup
            newListing.isNewGroup = items.isNewGroup
            newListing.lastMessage = items.lastMessage
            newListing.lastMsgRead = items.lastMsgRead
            newListing.lastMsgTime = items.lastMsgTime
            newListing.lastMsgTimeActual = items.lastMsgTimeActual
            newListing.members = items.members
            newListing.messages = items.messages
            newListing.name = items.name
            newListing.profilePic = items.profilePic!
            newListing.roomSID = items.roomSID
            newListing.twChannelObj = items.twChannelObj
            newListing.unReadMsgsCount = items.unReadMsgsCount
            print(newListing)
            self.realm.add(newListing)
        }
    }

可能有几个原因

  • 使所有变量
    @objc dynamic var
  • 确保
    realm
    对象在类中是全局对象,否则从
    self.realm.add(newListing)
    中删除
    self
  • 确保分配给
    newListing
    变量的所有值都不是
    nil
    (已使用一些默认值启动的变量)
  • TCHChannel
    TCHMember
    TCHMessage
    的实际数据类型是什么?
    领域
    可能不支持这些类型
  • 确保在向领域添加条目后没有修改
    SingleChatRealm
    类结构。在这种情况下,您必须删除旧的
    .realm
    文件并创建一个新文件

  • 我已经运行了您的代码。我的应用程序因此错误而崩溃,由于未捕获的异常“RLMException”而终止应用程序,原因是:“表中没有列。”@你可以在这里看到答案:。您应该在领域对象中用'dynamic'关键字标记持久化属性。当我使用dynamic时,它会显示错误'dynamic'var'twChannelObj'也必须是'@objc'@VSNV当我使用objc动态变量设置变量时,这些变量应该是@objc dynamic var name=“”。它显示错误,由于未捕获的异常“RLMException”而终止应用程序,原因是:“属性“twChannelObj”声明为“TCHChannel”,这不是受支持的RLMObject属性类型。所有属性都必须是原语、NSString、NSDate、NSData、NSNumber、RLMArray、RLMLinkingObject或RLMObject的子类@杰思:没错。Realm支持列出的对象类型,无法管理其他类型的对象。首先,请参阅领域文档,在添加数据之前,我不会修改领域,其次,它在类中是全局的,这些TCHChannel、TCHMember和TCHMessage数据类型是twilio第三方库的类,基类为NSObject。在这些类数据类型中出现了一个问题,如何解决这个问题@Pritam HazraRealm支持boolean、byte、short、int、long、float、double、String、Date和byte[]字段类型。NSObject引用无法保存在域上。尝试以任何给定格式保存来自TCHChannel、TCHMember和TCHMessage的特定数据。我的意思是不存储孔对象,只是尝试存储特定的属性@JunaidKhanbut然后我希望稍后在TCHMember数组中显示表视图中的数据@Pritam HazraSee此链接:。TCHMember由这些参数组成。只需单独保存这些参数。为了显示make TCHMember对象从realm获取参数,我已经在realm中存储了TCHMember和TCHMessage参数,现在我应该为TCHMember创建realm对象类并在其中获取这些参数@普里塔姆·哈兹拉