Я использую RestKit и realm.io вместе. У меня есть массив значений (массив представляет собой строки URL-адресов изображений), возвращаемый в JSON, который должен стать RLMArray
из RLMObject
s. Я считаю, что сопоставления настроены правильно, потому что он пытается преобразовать результаты в RLMArray
. Но я получаю следующую ошибку от RestKit:
restkit.object_mapping:RKMappingOperation.m:449 Failed transformation of value at keyPath 'picList' to representation of type 'RLMArray': Error Domain=org.restkit.RKValueTransformers.ErrorDomain Code=3002 "Failed transformation of value '(
"Picture {\n\turl = ;\n\tremote_url = http://placekitten.com/g/500/500;\n}",
"Picture {\n\turl = ;\n\tremote_url = http://placekitten.com/g/400/400;\n}",
"Picture {\n\turl = ;\n\tremote_url = http://placekitten.com/g/300/300;\n}"
)' to RLMArray: none of the 2 value transformers consulted were successful."
Поэтому я создал преобразователь значений для выполнения преобразования вручную. Вот мой код:
func setupValueTransformerForPicList(){
println("called value transformer function")
var picListValueTransformer = RKBlockValueTransformer(validationBlock: { (inputClass:AnyClass!,outputClass:AnyClass!) -> Bool in
if (inputClass.className() == "Array" || inputClass.className() == "__NSArrayM") && outputClass.className() == "RLMArray" {
return true
}
return false
}) { (inputValue:AnyObject!, var outputValue, outputClass, error) -> Bool in
println("called value transformer")
if let thisArray:NSArray = inputValue as? NSArray{
var picRlmArray:RLMArray = RLMArray(objectClassName: Picture.className())
for item in thisArray {
if let thisPicture:Picture = item as? Picture{
picRlmArray.addObject(thisPicture)
} else {
return false
}
}
outputValue = picRlmArray // this is the line that throws the error
return true
}
return false
}
RKValueTransformer.defaultValueTransformer().addValueTransformer(picListValueTransformer)
}
Однако я получаю сообщение об ошибке:
'RLMArray' is not convertible to 'AutoreleasingUnsafeMutablePointer<AnyObject?>'
Я пробовал опускаться
outputValue = picRlmArray as AutoreleasingUnsafeMutablePointer<AnyObject?>
с тем же результатом. Я пробовал делать что бы это ни было (если это вообще что-то)
outputValue = picRlmArray as AutoreleasingUnsafeMutablePointer<RLMArray?>
и получить ошибку
'RLMArray' is not identical to 'AnyObject'
Я немного не в себе, но чувствую, что это определенно должно быть достижимо. Любая помощь будет принята с благодарностью. Благодарю вас!
ИЗМЕНИТЬ:
Я также не могу вернуть быстрый массив из этой функции. Выдает ту же ошибку. Я думаю, что это может быть более общий вопрос о том, как возвращать типы, которые не являются AnyObject
s.
className()
, проверьте тип класса (isKindOfClass
). Ваш код вызывается? И я не писал никакого быстрого, но должен быть параметрinout
вместоvar
? - person Wain   schedule 05.12.2014AnyClass
. Когда я пытаюсь использовать inout, я получаю несоответствие типов. И да, код вызывается. - person Mike Wrather   schedule 05.12.2014isSubclassOfClass
является подходящим методом для использования. Я предполагаю, что это проблема быстрого кастинга, но я не могу дать много советов по этому поводу... - person Wain   schedule 08.12.2014