Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift在iOS中持久化包含27000个节点的trie数据树的方法是什么?_Ios_Swift_Core Data_Persistence_Trie - Fatal编程技术网

使用Swift在iOS中持久化包含27000个节点的trie数据树的方法是什么?

使用Swift在iOS中持久化包含27000个节点的trie数据树的方法是什么?,ios,swift,core-data,persistence,trie,Ios,Swift,Core Data,Persistence,Trie,我正在构建一个Trie树,它将包含下面大约27000个节点。我想坚持下去,而不是每次在应用程序启动时都重新创建它。因为child属性是另一个节点的字典,所以我在使用NSCoding将其归档并存储在核心数据实体中时遇到了问题。是否有办法将此节点存储在核心数据中?或者我应该使用不同类型的持久性 class TrieNode { var letter:Character var fullWord:Bool var leadingLetters:String var c

我正在构建一个Trie树,它将包含下面大约27000个节点。我想坚持下去,而不是每次在应用程序启动时都重新创建它。因为child属性是另一个节点的字典,所以我在使用
NSCoding
将其归档并存储在核心数据实体中时遇到了问题。是否有办法将此节点存储在核心数据中?或者我应该使用不同类型的持久性

class TrieNode {

    var letter:Character
    var fullWord:Bool
    var leadingLetters:String
    var child = [Character:TrieNode]()

    init (letter:Character, leadingLetters:String, fullWord:Bool) {
        self.letter = letter
        self.fullWord = fullWord
        self.leadingLetters = leadingLetters
    }
}    

我在尝试使用核心数据时遇到的主要问题是如何将
var child=[Character:trinode]()
转换为NSData或CD可以存储在实体中的其他可用类型。关于如何做到这一点的示例将不胜感激。

核心数据有点笨拙。我想我应该做的是:

  • 创建一个名为
    trieodelink
    的新实体。它有一个属性,一个名为
    childString
    的字符串和一个名为
    node
    的关系,类型为
    triode
    。此实体的每个实例表示trie节点的一个子节点
  • 从现有的
    trieode
    向新的
    trieodelink
    实体添加新的多对多关系
  • 保留现有的
    子词典。在方便的时候,通过扫描步骤2中的新到多关系来初始化此词典。方便的时间可能是在
    awakeFromFetch
    中,或者您可以将其设置为Swift
    lazy
    属性。或者,如果您想以更高的内存使用率为代价预加载数据以获得更快的性能,那么您可以编写一些代码,在需要子节点之前将其递归加载到几个级别

  • 这样做的效果是,您可以在需要时根据需要加载部分trie。一旦加载,您就可以使用
    子字典快速查找子节点。

    谢谢,汤姆。我的主要问题是试图把儿童词典变成核心数据喜欢的东西——你对如何做到这一点有什么建议吗?我想我只是描述了一种方法。您无法保存字典,因此需要转换为可以保存在核心数据中的内容。这是一个计划;可能还有其他。您不想将其存储为
    NSData
    。只需为
    trinode
    创建数据模型,并为其创建一个
    NSManagedObject
    ,然后如何存储子属性?它不允许我将
    [Character:trinode]()
    编译为
    NSManagedObject
    。请查看核心数据。如果你自己能为此付出一些努力,我们将不胜感激。本网站不是教你如何使用它,而是帮助你解决具体问题。本网站是为@GuidoHendriks提供帮助和指导-如果你不知道答案,欢迎你尝试帮助。我向您提出了一个具体问题—我无法找到将
    [Character:trinode]()
    存储为
    NSManagedObject
    的方法,这导致了第一个问题。你愿意进一步澄清你的建议吗?谢谢,这只是一对多的基本关系?