【问题标题】:Issue with arrays in Swift Library - Realm 2.4.1Swift 库中的数组问题 - Realm 2.4.1
【发布时间】:2017-01-30 22:47:07
【问题描述】:

Realm 数据库有一个奇怪的问题。

不能从领域数据数组中的对象中提取数据吗?

当你制作简单的对象时,比如这个:

import Foundation
import RealmSwift

class Dog: Object {
var index = 0
var day = ""

}

之后,您创建一个当前类型的对象列表:

    var dog1 = Dog()
    var dog2 = Dog()
    var dog3 = Dog()

    dog1.day = "one day"
    dog1.index = 0

    dog2.day = "two day"
    dog2.index = 1

    dog3.day = "three day"
    dog3.index = 2


    try! realm.write {
        realm.add(dog1)
        realm.add(dog2)
        realm.add(dog3)
    }

然后,您会获得这些对象的列表,但从 Realm 中,您无法从这些对象中获取数据。

让我们看看...

    var dogs = realm.objects(Dog.self)

//从领域中获取创建的对象列表

    print("All Dogs",dogs)

//输出:

    All Dogs Results<Dog> (
    [0] Dog {
    index = 0;
    day = one day;
    },
    [1] Dog {
    index = 1;
    day = two day;
    },
    [2] Dog {
    index = 2;
    day = three day;        
    })

//一切正常 //接下来的3条命令和之后的3条输出

    print("Dog 1",dogs[0])


    print("Dog 2",dogs[1])


    print("Dog 3",dogs[2])

//三个输出 //输出1

    Dog 1 Dog {
       index = 0;
       day = one day;
    }

//输出2

    Dog 2 Dog {
    index = 1;
    day = two day;
    }

//输出3

    Dog 3 Dog {
    index = 2;
    day = three day;
    }

//上面一切正常,但现在问题开始了

    print("Dog 1 day : ",dogs[0].day)

//输出

      Dog 1 day : 

//下一步

    print("Dog 2 day : ",dogs[1].day)

//输出:

    Dog 2 day :

//下一步

    print("Dog 3 day : ",dogs[2].day)

//输出

    Dog 3 day :

//OK 上面三个命令都不好

//让我们尝试另一种方式

    print("Dog 1 day : ", realm.objects(Dog.self).first?.day)

//输出

    Dog 1 day :  Optional("")

//这种方式也没有给我带来什么好处

//最后一种看待这个问题的方法:

    let dogss = try! Realm().objects(Dog.self)
    for i in 0..<2 {
        let dog = dogss[i]
        print("Dog : ", dog,"\n\n\n\n")
        print("And just dog day : ", dog.day)
        // ...
    }

//预期输出:

    Dog :  Dog {
    index = 0;
    day = one day;
    } 
    And just dog day : one day  
    Dog :  Dog {
    index = 1;
    day = two day;
    } 

    And just dog day : two day

//但是我们有

   Dog :  Dog {
   index = 0;
   day = one day;
   } 
   And just dog day :  
   Dog :  Dog {
   index = 1;
   day = two day;
   } 
   And just dog day :  

后记:

所以,我使用 Xcode 8.2.1,swift 3。这发生在所有模拟器中。 我知道这可能是我的错,所以如果你能帮我解决这个问题,我会很高兴!

【问题讨论】:

    标签: arrays swift object realm


    【解决方案1】:

    必须使用dynamic 修饰符声明内置类型(字符串、整数等)的属性,以使 Realm Swift 能够提供从底层 Realm 文件中检索值的 getter。如果没有 dynamic 修饰符,Swift 编译器会生成对底层实例变量的访问,该变量不包含从 Realm 文件加载的对象的任何数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多