这真的让我很烦......所以我制作了一个足够基本的应用程序来查询 servlet。
在我昨晚做了一些改变之前,它工作得很好。
使用 ASIHTTPRequest 的调用是同步工作的,它返回了我所期望的,但是当我使用 NSOperationQueue 异步进行相同的调用时,它在 requestFinished() 中返回完全不同的响应;
任何人都可以确定它可能出错的地方吗?这可能很简单,但我已经盯着它看了好几个小时,无法确定原因。
网站视图控制器.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];
}
网站视图控制器.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;
正如我所说,它使用同步调用按预期工作,但是在异步调用时我不断得到不正确的 servlet 定义。
提前致谢。