2016-02-05 5 views
1

Я следующий кодSwift Realm: После записи транзакции набора ссылок на ноль

class Family: Object { 
    dynamic var name = "" 
    var members = List<FamilyMember>() 
} 

class FamilyMember: Object { 
    dynamic var name = "" 
    dynamic var belongsToFamily: Family? 
} 

let realm = try! Realm() 

let familyMember = FamilyMember() 
familyMember.name = "NameExample" 

let newFamily = Family() 
newFamily.name = "Familyname" 

try! realm.write { 
    newFamily.members.append(familyMember) 
    familyMember.belongsToFamily = newFamily 
    realm.add(newFamily) 
    realm.add(familyMember) 
} 

ВОПРОС: Почему familyMember.belongsToFamily устанавливается на ноль после написания сделки Realm в?

+0

Я нашел эту статью, которая близка к моей проблеме, но до сих пор не решить: http://stackoverflow.com/questions/31118060/realm-ios-object -reference-set-to-nil-after-save – clex

+0

Я использовал этот подсказку, но до сих пор не имеет решения: http://stackoverflow.com/questions/34420889/realm-object-as-member-is-nil -после сохранения – clex

ответ

0

Вы можете попробовать удалить линию

realm.add(newFamily) 

из вашего блока записи?

+0

Тот же результат. НО Я добавил следующие строки, чтобы проверить, является ли это ноль или нет: если familyMember ?. belongsToFamily! == nil { print ("is nil") } else { print ("is not nil") } Результат: «is not nil», но отладчик показывает нуль. принадлежитToFamily = (Family?) Nil Я действительно смущен. – clex

+0

Я предлагаю вам установить Realm Browser отсюда: https://itunes.apple.com/us/app/realm-browser/id1007457278?mt=12 или здесь: https://github.com/realm/realm-browser- osx, а затем откройте файл вашего домена, чтобы проверить ваши данные. Вы можете увидеть изменение данных в браузере, когда вы измените его в своем коде, что делает Realm Browser действительно хорошим инструментом. И если вы хотите открыть браузер, я могу порекомендовать установить RealmPlugin из Alcatraz. – bcamur

1

Предполагаемое поведение. Realm не копирует данные до фактического доступа к свойствам. При доступе к свойствам Realm извлекает данные непосредственно из своего файла. Так что Realm не хранит данные в своем ivar. Кроме того, объект Realm будет изменен на другой класс в момент его сохранения. Вот почему вы не можете видеть какие-либо значения через отладчик и заново вывести все значения после их совершения.

Итак, если вы хотите отлаживать значение объекта, вы можете использовать команду po в консоли отладки или просто использовать метод print().

Смотрите также https://realm.io/docs/swift/latest/#debugging

отладки приложений с использованием Realm в Swift API должно быть сделано через консоль LLDB.

Обратите внимание, что хотя скрипт LLDB, установленный через наш плагин Xcode, позволяет проверять содержимое ваших переменных Realm в пользовательском интерфейсе Xcode, это еще не работает для Swift. Вместо этого эти переменные будут показывать неверные данные. Вместо этого вы должны использовать команду po LLDB для проверки содержимого данных, хранящихся в Realm.

И смотри также: https://github.com/realm/realm-cocoa/issues/2777

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