swift - 使用 RKValueTransFormer 将 NSArray 转换为 RLMArray 无法将 outputValue 转换为 AutoreleasingUnsafeMutablePointer<AnyObject?>

标签 swift restkit restkit-0.20 realm

我同时使用 RestKit 和 realm.io。我有一组值(该数组是图片的 url 字符串)以 JSON 格式返回,它应该成为 RLMObjectRLMArray。我相信映射设置正确,因为它会尝试将结果转换为 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'

我在这里有点力不从心,但我觉得这绝对是可以实现的。任何帮助将不胜感激。谢谢!

编辑:

我也无法从此函数返回 swift 数组。它给出了同样的错误。我认为这可能是一个更普遍的问题,关于如何返回不是 AnyObject 的类型。

最佳答案

我是 RestKit 的当前维护者,我很遗憾地说我没有太多机会同时使用 RestKit 和 Realm,尤其是 Swift。

我将查看可能导致此错误的原因。

编辑:

在我看来,使用 outputValue.memory = picRlmArray 而不是 outputValue = picRlmArray 就可以了!

关于swift - 使用 RKValueTransFormer 将 NSArray 转换为 RLMArray 无法将 outputValue 转换为 AutoreleasingUnsafeMutablePointer<AnyObject?>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302925/

相关文章:

ios - UIView 动画选项重复计数

ios - 如何将我的约束完美地设置到 Storyboard 的底部

ios - RestKit 0.20 - 使用 keyPath 映射

ios - 使用 NSURLCache 时如何清除缓存的响应和 ETag 信息?

ios - 为所有Restkit请求添加Url参数

ios - RestKit JSON 映射

ios - 子类的类上的泛型

objective-c - 运行时无法识别 Objective-C 框架中的 Swift 类别

objective-c - RestKit - 水合外键数组

ios - 使用 RESTKit 映射 iTunes 搜索 API 结果