0
    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を取得します。

一部のオブジェクトは自動的に解放されると思います。どれなのかわからない…

4

3 に答える 3

0

コードに問題があることがたくさんあります。最も明白なのは、オブジェクトマネージャを保持しないことです(これがsharedManagerにならない限り)。別のオブジェクトをロードしようとしていますが、POSTを使用しています。ただし、報告されたエラーから判断すると、ClassAインスタンスの割り当てが解除されており、デリゲートとして設定されているため、EXC_BAD_ACCESSが取得されていると思います。デリゲートコールバックではなく、ブロックベースのメソッドの使用に移行することをお勧めします。

于 2012-08-21T06:48:36.693 に答える
0

インスタンス変数baseUrlとを確認してくださいinputDictインスタンス変数の代わりに常にプロパティを使用してください。そうすれば、このような問題に直面することはありません。

于 2012-08-20T12:52:29.243 に答える
0

ブロックを使用することで、サーバーにリクエストを送信し、サーバーから応答を得ることができます。ここで素敵なチュートリアルを見つけました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]);
        };


    }];
}
于 2012-08-21T06:59:00.670 に答える