2016-05-07 4 views
0

Я разрабатываю приложение iOS с помощью RealmSwift, ссылаясь здесь. https://realm.io/docs/swift/latest/#in-memory-realms И, что я не понимаю, как я могу указать местоположение (запись и столбец) данных в файле области.Как я могу извлечь значение в виде строки из RealmSwift?

Я сохранил файл царства с именем «DicData.realm» в основной папке, где сохранено то же местоположение, что и ViewController.swift.

Данные DicData.realm что-то вроде этого:

 
1,face,423 
2,rain,435 
3,airplane,555 

Если я запускаю этот код, он печатается только так: «Результаты: Результаты()». Кажется, что метод фильтра просто игнорируется. Когда я хочу вынуть слово «самолет» и сохранить в переменной как строку, как мне изменить код?

override func didMoveToView(view: SKView) { 

    func test()->Int { 
    let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "DicData")) 
    let results = realm.objects(DBData).filter("id == 3") 

    print("results: \(results)")   
} 

class DBData: Object { 
    dynamic var id = 0 
    dynamic var name = "" 
    dynamic var code = "" 
} 
+0

Попробуйте 'пусть результаты = realm.objects (DBData) .filter ($ 0.id == 3)' вместо –

+0

Спасибо за ваши советы. Он терпит неудачу с ошибкой анонимного закрытия, не содержащейся в замыкании. – vanagar

+0

Прости, я пропустил закрытие. Вот обновленная строка: 'let results = realm.objects (DBData) .filter ({$ 0.id == 3})' –

ответ

0

Вы имеете в виду здесь к главе в памяти Realms и настроили конфигурацию, чтобы использовать их. in-memory Realm не является файлом. Он живет исключительно в памяти и фактически не записывается на диск.

Если у вас есть готовый файл, который вы хотите связать с вашим приложением, вам нужно убедиться, что он является частью фазы «Копирование файлов» фазы соответствующего объекта вашего проекта Xcode.

Затем вы можете скопировать файл из пакета приложений изначально через NSFileManager в путь, где копия может быть изменена.

let defaultURL = Realm.Configuration.defaultConfiguration.fileURL! 
let bundleURL = NSBundle.mainBundle().URLForResource("DicData", withExtension: "realm")! 
do { 
    try NSFileManager.defaultManager().copyItemAtURL(bundleURL, toURL: defaultURL) 
} catch {} 
} 
+0

Большое спасибо за ваш совет. Я заменил «v0URL» на bundleURL и запустил ваш код, но он (вторая строка) потерпел неудачу со следующей ошибкой «фатальная ошибка: неожиданно найденная nil при распаковке необязательного значения» – vanagar

+0

Исправлено неправильное имя переменной в приведенном выше коде. Вы убедились, что файл скопирован в пакет приложений? – marius

+0

Я не думаю, что файл скопирован правильно. Когда я связал файл с именем «DicData.csv» в том же месте и изменил вторую строку на «let bundleURL = NSBundle.mainBundle(). URLForResource (« DicData », withExtension:« csv »)!», t получить любую ошибку, но только что получил сообщение об ошибке, которое я написал внутри catch {}. – vanagar

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