0

これは本当に私を悩ませています...それで、サーブレットを照会するのに十分な基本的なアプリを作成しました。

昨夜いくつかの変更を加えるまでは正常に機能していました。

ASIHTTPRequest を使用した呼び出しは同期的に機能しており、期待どおりの結果を返していますが、NSOperationQueue を使用して非同期で同じ呼び出しを行うと、requestFinished(); でまったく異なる応答が返されます。

どこが間違っているのか誰でも特定できますか?おそらく単純なことですが、何時間も見つめていて、その理由を特定できません。

websiteViewController.m

- (IBAction)searchStockOfCatNum: (id) sender
{
NSAutoreleasePool *pool =  [[NSAutoreleasePool alloc] init];

if (![self queue]) {
    [self setQueue:[[[NSOperationQueue alloc] init] autorelease]];
}

for (int i = 0; i < self.ids.count; i++)
{
    currStoreID = [self.ids objectAtIndex: i];
    NSURL *url = <website removed>;
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    request.userInfo = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSString stringWithFormat:@"%d", i], @"idx", nil];

    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestFinished:)];
    [request setDidFailSelector:@selector(requestFailed:)];
    [[self queue] addOperation:request];
}

[pool release];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
     NSData *responseData = [request responseData];
     NSString *responseStr = [request responseString];
}

websiteViewController.h

@interface websiteViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) NSMutableArray *names, *ids, *stockLvls;
@property (strong, nonatomic) IBOutlet UITextField *catNum;
@property (strong, nonatomic) IBOutlet UIButton *searchBtn;
@property (strong, nonatomic) NSString *currStoreID;
@property (strong, nonatomic) NSOperationQueue *queue;

- (IBAction)searchStockOfCatNum: (id) sender;

私が言ったように、同期呼び出しを使用すると期待どおりに動作しますが、非同期で呼び出すと間違ったサーブレット定義を取得し続けます。

前もって感謝します。

4

0 に答える 0