Я использую ObjectMapper (https://github.com/Hearst-DD/ObjectMapper) и Realm в моем проекте. Мои объекты - все RLMObjects;Получение дочерних RLMObjects из трансформатора с использованием ObjectMapper
У меня есть, например, в блог объект, который содержит вложения:
dynamic var attachments = RLMArray(objectClassName: Attachment.className())
У меня есть пользовательский трансформатор, который начинается так:
func transformFromJSON(value: AnyObject?) -> RLMArray? {
let attachments = RLMArray(objectClassName: Attachment.className())
if let str = value as? String {
Я не могу понять, как я мог бы преобразовать их в RLMArray, я всегда получаю нуль в своем трансформаторе.
"attachments" : [
{
"id" : 2,
"file_name" : "img1.jpg",
"url" : "uploads\/img.jpg"
},
{
"id" : 3,
"file_name" : "img1.jpg",
"url" : "uploads\/img.jpg"
},
{
"id" : 4,
"file_name" : "img1.jpg",
"url" : "uploads\/img.jpg"
}
],
Я считаю, что это трудно, чтобы обернуть мою голову вокруг кода, и я «не найти большую помощь в отладчик Xcode.
TL; DR Мой трансформатор получает нуль, или я ожидаю неправильного типа, как преобразовать значение в RLMArray.
Обновление: Надеюсь, что становится ясно, с чем я борюсь. Во всяком случае я изменил свой трансформатор, чтобы содержать это ради отладки:
func transformFromJSON(value: AnyObject?) -> RLMArray? {
let attachments = RLMArray(objectClassName: Attachment.className())
if let val:AnyObject = value {
Debug.log("the val is this \(val)")
Debug.log("the val is this \(val as? String)")
Debug.log("the val is this \(val as? Attachment)")
Debug.log("the val is this \(val as? Array<Attachment>)")
Debug.log("the val is this \(val as? Array<String>)")
Debug.log("the val is this \(val as? Dictionary<String, AnyObject>)")
Debug.log("the val is this \(val as? Dictionary<String, String>)")
let mir = reflect(value)
Debug.log("the mirror is this \(mir)")
}
return attachments
}
Еще более запутанной, первый debug.log (который только делает NSLog). выводит следующее:
the val is this (
{
"file_name" = "img.jpg";
id = 2;
url = "uploads/img.jpg";
},
{
"file_name" = "img2.jpg";
id = 3;
url = "uploads/img2.jpg";
},
{
"file_name" = "img3.jpg";
id = 4;
url = "uploads/img3.jpg";
}
)
Что ни JSON, ни массив, ни словарь, насколько я могу видеть, вызвать эти строки журнала возврат:
Валь это ноль или, массив валь это дополнительно ([])
обновление это было, кажется, кортеж, так что теперь у меня есть это:
func transformFromJSON(value: AnyObject?) -> RLMArray? {
let attachments = RLMArray(objectClassName: Attachment.className())
if let val:AnyObject = value {
Debug.log("-- new obj --")
if let arr = value as? Array<(AnyObject)> {
for file_name in arr {
Debug.log("fn: \(file_name)")
}
}
Это позволяет мне перебирать различные вложения, теперь мне все же нужно выяснить, что такое внутренний объект.
обновление После получения массива кортежа с «AnyObject», кажется, ценность была __NSCFDictionary, которую я мог бы получать значение от использования objectForKey
Что именно ваш вопрос здесь? Вы говорите, что вам трудно отлаживать, но вы не упомянули никаких ошибок. – ravron
Я тоже не понимаю, о чем вы просите.Можете ли вы уточнить, почему вы испытываете трудности с отладкой? – jpsim
Я предполагаю, что это специфично для пакета ObjectMapper, трансформатор расширяет трансформатор от objectmapper. Я ожидаю строку, которую я мог бы преобразовать в массив JSON и создать RLMArray, но я все равно получаю нулевое значение в своем трансформаторе. Это имеет смысл? –