2017-01-30 5 views
0

У меня странная проблема с библиотекой данных Realm.Проблема с массивами в Swift Library - Realm 2.4.1

Невозможно ли вытащить данные из объекта, находящегося в массиве данных области?

Когда вы делаете простой объект, как этот:

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 команды и три выхода после

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, скор 3. Это происходит во всех симуляторах. Я понимаю, что, возможно, это моя вина, поэтому я буду рад, если вы поможете мне решить эту проблему!

ответ

0

Свойства встроенных типов (строки, целые числа и т. Д.) Должны быть объявлены с помощью модификатора dynamic, чтобы позволить Realm Swift предоставлять геттеры, которые извлекают значения из основного файла Realm. Без модификатора dynamic компилятор Swift генерирует доступ к основной переменной экземпляра, которая не содержит данных для объектов, загружаемых из файла Realm.

+0

Lol, я забыл о динамике ... Большое спасибо! –

Смежные вопросы