2014-04-19 31 views
0

我试图在我的RKObjectManager上搜索,如果我正在构建的描述已经注册或者没有。 我发现有一个描述符列表感谢requestDescriptors,但我无法将它们与我的相比较。RKObjectManager:在添加之前检查requestDescriptors

我绝对需要检查这些描述符,因为我不能用这个代码添加一个又一个,如果它已经存在(这使得我的应用程序崩溃):

[objectManager addRequestDescriptor:requestDescriptor]; 

我试过一个简单的迭代与

BOOL toAdd = YES; 
for (RKRequestDescriptor *desc in objectManager.requestDescriptors) { 
    if ([desc isEqualToRequestDescriptor:requestDescriptor]) { 
    toAdd = NO; 
    } 
} 
if (toAdd) { 
    [objectManager addRequestDescriptor:requestDescriptor]; 
} 

但我可以看到我的调试器:

Printing description of desc: 
<RKRequestDescriptor: 0xd366950 method=(POST) objectClass=User rootKeyPath=(null) : <RKObjectMapping:0xd3664d0 objectClass=NSMutableDictionary propertyMappings=(
    "<RKAttributeMapping: 0xd366510 facebookToken => fb_token>" 
)>> 
Printing description of requestDescriptor: 
<RKRequestDescriptor: 0x12847d00 method=(POST) objectClass=User rootKeyPath=(null) : <RKObjectMapping:0x1284c3d0 objectClass=NSMutableDictionary propertyMappings=(
    "<RKAttributeMapping: 0x12842860 facebookToken => fb_token>" 
)>> 

所以我的测试关于平等是错误的,我的变量toAdd仍然如此。

我有同样的问题:

if (desc.mapping == requestDescriptor.mapping) { 
    toAdd = NO; 
} 

请参阅从调试器的比较:

Printing description of $0: 
<RKObjectMapping:0xd03ac50 objectClass=NSMutableDictionary propertyMappings=(
    "<RKAttributeMapping: 0xd066530 facebookToken => fb_token>" 
)> 
Printing description of $1: 
<RKObjectMapping:0xd431d90 objectClass=NSMutableDictionary propertyMappings=(
    "<RKAttributeMapping: 0xd4520b0 facebookToken => fb_token>" 
)> 

谢谢您的帮助。

回答

2

RKRequestDescriptor类有一个方法来比较两个描述符。

/** 
    Returns `YES` if the receiver and the specified request descriptor are considered equivalent. 
*/ 
- (BOOL)isEqualToRequestDescriptor:(RKRequestDescriptor *)otherDescriptor; 

所以,你可以遍历请求描述符阵列,并检查它是否已经在那里:

例如:

for (RKRequestDescriptor *r in [[RKObjectManager sharedManager] requestDescriptors]) { 
    if ([r isEqualToRequestDescriptor:otherRequestDescriptor]) { 
     // do something 
    } 
} 
+0

我编辑我的文章解释说,这是行不通的。我在主要主题上添加了比较。 – BriceB

+1

好的,我只是用我自己的项目尝试过。如果描述符的一个参数是“nil”,那么'isEqualToRequestDescriptor'确实返回'NO'。所以最后你必须设置所有参数。在我的情况下,'rootKeyPath'是'nil',导致比较失败。为了克服'rootKeyPath'问题,我将它设置为'@“”'。 – Daniel

+1

它的工作原理!我不得不对API进行一些更新,但它完美的工作。感谢您的测试和快速! – BriceB

相关问题