0

私はこの問題に本当に困惑しています。Restkit を使用して Web サービスにアクセスしています。ほとんどの操作は正常に機能していますが、最初の 2 つの intializeDevice と insertNewPatron は機能していません。これらの場合、非同期リクエストは起動されますが、デリゲート メソッドは呼び出されません。サーバーを確認しましたが、これらの呼び出しが行われた形跡はありません。これらの操作が機能しない理由の違いはわかりません。呼び出しを行うクラスは次のとおりです。

-(id)initForController:(UIViewController *)viewController{
    self.vc=viewController;
    NSString *baseURL = @"https://xxxxxxxxx/APNS_WebService/rest/operations/";
    NSURL *url=[NSURL URLWithString:baseURL];

    client = [RKClient clientWithBaseURL:url];
    client.disableCertificateValidation=YES;

    return self;
}

-(void)insertNewPatronWithCard:(NSString *)cardNumber PIN:(NSString *)pin NickName:(NSString *)nickname Device:(NSString *)deviceID{


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/insertNewPatron?cardNumber=%@&pin=%@&nickname=%@&deviceID=%@",cardNumber,pin,nickname,deviceID]];
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"insertNewPatron" forKey:@"operation"];
    request.params=params;
    request.delegate=self;
    [request sendAsynchronously];


}

-(void)initializeDeviceWithID:(NSString *)deviceID{



    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/initializeDevice?deviceID=%@",deviceID]];
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"initializeDevice" forKey:@"operation"];
    request.params=params;
    request.delegate=self;
    [request sendAsynchronously];


}

-(void)updateDevicePreferencesWithDeviceID:(NSString *)deviceID DueDateNotice:(NSString *)dueDateNotice HoldsNotice:(NSString *)holdsNotice EventNotice:(NSString *)eventNotice{


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/updateDevicePreferences?deviceID=%@&dueDateNotice=%@&holdsNotice=%@&eventNotice=%@",deviceID,dueDateNotice,holdsNotice,eventNotice]];
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"updateDevicePreferences" forKey:@"operation"];
    request.params=params;
    request.delegate=self;
    [request sendAsynchronously];


}

-(void)removeUserWithCard:(NSString *)cardNumber{


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/removeUser?cardNumber=%@",cardNumber]];
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"removeUser" forKey:@"operation"];
    request.params=params;
    request.delegate=self;
   [request sendAsynchronously];


}

-(void)addEventWithDevice:(NSString *)deviceID EventID:(NSString *)eventID{



    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/addEvent?deviceID=%@&eventID=%@",deviceID,eventID]];
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"addEvent" forKey:@"operation"];
    request.params=params;
    request.delegate=self;
    [request send];


}

-(void)removeEventWithDevice:(NSString *)deviceID EventID:(NSString *)eventID{


   request = [client requestWithResourcePath:[NSString stringWithFormat:@"/removeEvent?deviceID=%@&eventID=%@",deviceID,eventID]];
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"removeEvent" forKey:@"operation"];
    request.params=params;
    request.delegate=self;
     [request sendAsynchronously];

}

-(void)removeAllEventsWithDevice:(NSString *)deviceID{


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/removeAllEvents?deviceID=%@",deviceID]];
    request.delegate=self;
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"removeAllEvents" forKey:@"operation"];
    request.params=params;

   [request sendAsynchronously];


}

動作しない操作については、Restkit のログに「Prepared GET UrlRequest」というメッセージが表示されますが、動作する操作で表示される「Proceeding with request」というメッセージは表示されません。

4

1 に答える 1

1

すべての変数が正しいことをブレークポイントで確認しましたか?ゼロの代理人やあなたが見逃しているものはありませんか?リクエストを分離して実行していますか、それとも別の呼び出しと同時にリクエストが行われている可能性がありますか?

呼び出しの1つが、プロセスで代理人を失っている可能性があります。競合状態を回避するために、非同期リクエストにはデリゲートパラダイムの代わりにブロックを使用することをお勧めします。

それが役に立てば幸い!

于 2013-01-15T14:02:03.720 に答える