gpt4 book ai didi

iphone - 多个异步 Web 服务请求 NSURLConnection iOS

转载 作者:太空狗 更新时间:2023-10-30 03:52:54 25 4
gpt4 key购买 nike

我有一个问题,我不确定如何解决。传递单个请求时,我可以毫无问题地向 REST 服务发出请求。

我现在的问题是基于该响应我得到了一些值,包括 ID。然后,所有检索到的 ID 都需要再次请求收集新信息。

我的猜测是将所有特定请求加载到数组或字典中并从中创建请求。有人对此有一些有用的提示吗?检索到的信息将填充到 UITableView 中。

最佳答案

我建议您在这个问题上使用同步-异步模式。

您需要实现两个同步方法:

// Fetch the array of ID's
-(NSArray*)fetchItemIDsWithError:(NSError**)error;

// Fetch the item for a ID
-(Item*)fetchItemForID:(NSString*)itemID error:(NSError**)error;

使用同步代码实现这些很容易且可测试。您可以轻松使用简单的方法,例如 dataWithURL...stringWithContentsOfURL...sendSynchronousRequest... 或 ASIHTTPrequest,并为此编写直接的单元测试。与并发代码通常的结局相比,代码也将非常容易维护和扩展。

现在进入第二步,创建一个异步包装器,我将使用这样的委托(delegate)和方法签名:

@protocol FetchItemsDelegate <NSObject>
-(void)didFetchItems:(NSArray*)array;
-(void)failedFetchItemsWithError:(NSError*)error;
@end

-(void)fetchItemsWithAsyncDelegate:(id<FetchItemsDelegate>)delegate;

您已经拥有执行所需操作的所有代码,因此您要做的就是实现异步部分。这段代码将被很好地分离和直接。可能不会超过这个:

-(void)fetchItemsWithAsyncDelegate:(id<FetchItemsDelegate>)delegate;
{
[self performSelectorInBackground:@selector(backgroundFetchItemsWithDelegate:)
withObject:delegate];
}

-(void)backgroundFetchItemsWithDelegate:(id<FetchItemsDelegate>)delegate;
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
BOOL success = YES;
NSMutableArray* items = [NSMutableArray array];
NSError* error = nil;
NSArray* itemIDs = [self fetchItemIDsWithError:&error];
if (itemIDs) {
for (NSString* itemID in itemIDs) {
Item* item = [self fetchItemForID:itemID
error:&error];
if (item) {
[items addObject:item];
} else {
success = NO;
break;
}
}
} else {
success = NO;
}
if (success) {
[delegate performSelectorOnMainThread:@selector(didFetchItems:)
withObject:[NSArray arraiWithArray:items]
waitUntilDone:NO];
} else {
[delegate performSelectorOnMainThread:@selector(failedFetchItemsWithError)
withObject:error
waitUntilDone:NO];
}
[pool release];
}

我在这里写了一篇关于这个主题的更长的博文:http://blog.jayway.com/2011/04/28/sync-asyn-pair-pattern-easy-concurrency-on-ios/

关于iphone - 多个异步 Web 服务请求 NSURLConnection iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com