RKManagedObjectRequestOperation编译器在调用初始化方法'initWithRequest:responseDescriptors'时抱怨前向声明

时间:2014-09-16 23:48:09

标签: objective-c restkit forward-declaration

尝试使用RestKit 0.23.3的托管对象,我遇到以下问题:

编译抱怨:

Reciever 'RKManagedObjectRequestOperation' for class message is a forward declaration

Reciever type 'RKManagedObjectRequestOperation' for instance message is a forward declaration

-(void)startOperation {
    NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
    RKObjectManager *objectManager = [CPRObjectManager comprintObjectManager];
    NSURLRequest *request = [objectManager requestWithObject:nil method:RKRequestMethodGET path:self.pathPattern parameters:self.requestParameters];

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:self.mapping method:RKRequestMethodAny pathPattern:self.pathPattern keyPath:self.keyPath statusCodes:statusCodes];


    // This is straight from RK Docs: https://github.com/RestKit/RestKit - Section: Managed Object Request
    // ERROR: http://gyazo.com/89ae7db26a367f0416c47549b6ea8cf3

    RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];

    RKManagedObjectStore *store = [[CPRPersistentStack sharedDataModel] objectStore];

}

遵循文档:https://github.com/RestKit/RestKit - 部分:托管对象请求看起来initWithRequest:responseDescriptors:被称为RKManagedObjectRequestOperation的类方法。

https://gist.github.com/wethu/2c6a7dfcbbc62af9dd36完整的文件包含在那里,任何人都知道发生了什么?

2 个答案:

答案 0 :(得分:3)

如果有人发现这个主题是因为它与Swift有关,那么Swift实现的解决方案是手动将其添加到桥接标题:

#import <RKManagedObjectRequestOperation.h>

因为即使你做了

import CoreData

RestKit无法看到它已导入。我没有找到任何其他解决方案。

答案 1 :(得分:2)

因此,在此之后的几个小时,我仍然不知道为什么编译器无法获取此初始化程序的方法签名。 但我通过添加:

解决了我的问题

#import "RKManagedObjectRequestOperation.h"

到我的实施档案。

所有其他RK类都发现问题很好,我不知道为什么这个类需要手动包含在#import <RestKit/RestKit.h>之外的头文件。

修改

我对这个解决方案不满意,我挖得更深,发现:

Network.h有这个:

#ifdef _COREDATADEFINES_H
#import "RKManagedObjectRequestOperation.h"
#endif

因此检查_COREDATADEFINES_H未定义我发现我的<project>.pch文件丢失#import <CoreData/CoreData.h>

因此,正确的解决方案是将其添加到我的pch文件中,它解决了我的问题。

我希望这可以帮助其他人,这看起来有点具体,但是你永远不知道还有谁跟着这条路走到了这一步。