我正在尝试在UnitTest之外创建我的RKEntityMapping。我遇到的问题是,只有在我的测试中创建它才有效。例如,这有效:
RKEntityMapping *accountListMapping = [RKEntityMapping mappingForEntityForName:@"CustomerListResponse" inManagedObjectStore:_sut.managedObjectStore];
[accountListMapping addAttributeMappingsFromDictionary:@{@"count": @"pageCount",
@"page": @"currentPage",
@"pages": @"pages"}];
虽然现在可以使用以下功能。 all to accoutListMapping使用相同的托管对象库返回上面显示的内容: RKEntityMapping * accountListMapping = [_sut accountListMapping];
在RKEntityMapping
中创建_sut
时出现此错误:
<unknown>:0: error: -[SBAccountTests testAccountListFetch] : 0x9e9cd10: failed with error:
Error Domain=org.restkit.RestKit.ErrorDomain Code=1007 "Cannot perform a mapping operation
with a nil destination object." UserInfo=0x8c64490 {NSLocalizedDescription=Cannot perform
a mapping operation with a nil destination object.}
我假设它所指的nil
目标对象是destinationObject:nil
。
RKMappingTest *maptest = [RKMappingTest testForMapping:accountListMapping
sourceObject:_parsedJSON
destinationObject:nil];
答案 0 :(得分:3)
确保您创建的文件具有主要目标和测试目标的目标成员资格。你可以通过以下方式找到:
这是因为如果您的类没有测试目标的目标成员资格,则测试目标实际上会创建您创建的类的副本,这意味着它具有与主目标不同的二进制文件。这导致该类使用RestKit二进制文件的测试版本,而不是主项目RestKit。这将导致isKindOfClass方法在尝试查看您传递的映射是否是来自主项目的RKObjectMapping类型时失败,因为它是来自RestKit的测试项目版本的RKObjectMapping类型,因此您的映射不会被使用,你得到了崩溃。
至少这是我对LLVM编译器如何工作的理解。我是iOS开发人员的新手,所以如果我出错了,请随时纠正。
答案 1 :(得分:1)
当使用Cocoapods时,单独包含多个目标的RestKit组件时,也可能由重复的类定义引起此问题。
有关详细信息,请查看this answer。
答案 2 :(得分:0)
当您运行测试时,您没有使用整个映射基础结构,因此RestKit不会为您创建目标对象。它只会测试映射本身。因此,您需要向测试方法提供所有三条信息,否则它将无法正常工作。
答案 3 :(得分:0)
我在Mapped对象上使用了一个类别,例如
RestKitMappings+SomeClass
+ (RKObjectMapping*)responsemappings {
return mappings;
}
现在这个类别必须包含在测试目标中,否则映射将不会被传递。