In ClassA.h
@interface ClassA : NSObject<RKObjectLoaderDelegate,RKRequestDelegate>
@property(nonatomic,strong)NSMutableDictionary *inputDict;
ClassA.m
//After Implementation
@synthesize inputDict;
-(void)sendRequestWithInputDict:(NSMutableDictionary*)inputDictVal
{
RKURL *baseURL = [RKURL URLWithBaseURLString:baseUrl];
RKObjectManager * manager = [RKObjectManager objectManagerWithBaseURL:baseURL];
[manager setClient:[RKClient sharedClient]];
manager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
RKObjectLoader *objectLoader = [manager loaderWithResourcePath:@"/getLocation"];
objectLoader.serializationMIMEType = RKMIMETypeJSON;
objectLoader.method = RKRequestMethodPOST;
objectLoader.params = inputDictVal;
objectLoader.delegate = self;
[objectLoader send];
}
-(void)getLocation
{
inputDict = [[NSMutableDictionary alloc]init];
[self sendRequest:inputDict];
}
baseUrl在我在此处导入的常量文件中声明。 我试图从另一个类调用sendRequest函数。但是我在requestWillPrepareForSend(RKRequest.m)中得到了一个EX_BAD_ACCESS。
我认为某个对象会自动释放。我不知道是哪一个......
答案 0 :(得分:0)
查看实例变量baseUrl
和inputDict
。 始终使用属性而不是实例变量,您将永远不会遇到此类问题。
答案 1 :(得分:0)
您的代码有很多问题。最明显的是不保留对象管理器(除非这成为共享管理器)另一个是尝试加载对象但使用POST。虽然,根据您报告的错误判断,我认为您的ClassA实例正在被释放,并且因为它被设置为委托,您将获得EXC_BAD_ACCESS。我建议你转向使用基于块的方法而不是委托回调。
答案 2 :(得分:0)
通过使用Blocks,我可以向服务器发送请求并从中获取响应。我在这里找到了很好的教程http://kalapun.com/blog/2012/05/17/how-i-restkit/
-(void)sendRequest:(NSMutableDictionary*)inputDict withResourcePath:(NSString*)resourcePath
{
RKURL *baseURL = [RKURL URLWithBaseURLString:baseUrl];
RKObjectManager *manager = [RKObjectManager objectManagerWithBaseURL:baseURL];
[manager setClient:[RKClient sharedClient]];
[manager loadObjectsAtResourcePath:resourcePath usingBlock:^(RKObjectLoader *objectLoader){
objectLoader.method = RKRequestMethodPOST;
objectLoader.params = inputDict;
objectLoader.onDidFailWithError = ^(NSError *error){
NSLog(@"Error: %@", [error localizedDescription]);
};
objectLoader.onDidLoadResponse = ^(RKResponse *response) {
NSLog(@"response: %@", [response bodyAsString]);
};
}];
}