Sil*_*ail 5 iphone network-programming objective-c nsurlconnection nsurlrequest
我有一个问题,我不知道如何解决.在传递单个请求时,我可以毫无问题地向REST服务发出请求.
我现在的问题是基于该响应,我得到一些价值,包括ID.然后,检索到的所有ID都需要另外请求收集新信息.
我的猜测是在数组或字典中加载所有特定请求并从中创建请求.有人对此有一些有用的提示吗?然后,检索到的信息将填充UITableView.
我建议您使用同步异步模式来解决这个问题。
\n\n您需要实现两个同步方法:
\n\n// Fetch the array of ID\'s\n-(NSArray*)fetchItemIDsWithError:(NSError**)error;\n\n// Fetch the item for a ID\n-(Item*)fetchItemForID:(NSString*)itemID error:(NSError**)error;\nRun Code Online (Sandbox Code Playgroud)\n\n使用同步代码实现这些是简单且可测试的。您可以使用简单的方法,例如dataWithURL\xe2\x80\xa6,,stringWithContentsOfURL\xe2\x80\xa6sendSynchronousRequest\xe2\x80\xa6或 ASIHTTPrequest 等简单方法,并为此编写直接的单元测试。与并发代码通常的最终结果相比,该代码也将非常容易维护和扩展。
现在到第二步,创建一个异步包装器,我将使用委托和方法签名,如下所示:
\n\n@protocol FetchItemsDelegate <NSObject>\n-(void)didFetchItems:(NSArray*)array;\n-(void)failedFetchItemsWithError:(NSError*)error;\n@end\n\n-(void)fetchItemsWithAsyncDelegate:(id<FetchItemsDelegate>)delegate;\nRun Code Online (Sandbox Code Playgroud)\n\n您已经拥有了满足您需要的所有代码,因此您所要做的就是实现异步部分。这段代码将很好地分离并且直接。大概不超过这个:
\n\n-(void)fetchItemsWithAsyncDelegate:(id<FetchItemsDelegate>)delegate;\n{\n [self performSelectorInBackground:@selector(backgroundFetchItemsWithDelegate:)\n withObject:delegate]; \n}\n\n-(void)backgroundFetchItemsWithDelegate:(id<FetchItemsDelegate>)delegate;\n{\n NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];\n BOOL success = YES;\n NSMutableArray* items = [NSMutableArray array];\n NSError* error = nil;\n NSArray* itemIDs = [self fetchItemIDsWithError:&error];\n if (itemIDs) {\n for (NSString* itemID in itemIDs) {\n Item* item = [self fetchItemForID:itemID\n error:&error];\n if (item) {\n [items addObject:item];\n } else {\n success = NO;\n break;\n }\n }\n } else {\n success = NO;\n }\n if (success) {\n [delegate performSelectorOnMainThread:@selector(didFetchItems:)\n withObject:[NSArray arraiWithArray:items]\n waitUntilDone:NO];\n } else {\n [delegate performSelectorOnMainThread:@selector(failedFetchItemsWithError)\n withObject:error\n waitUntilDone:NO];\n }\n [pool release];\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我在这里写了一篇关于此主题的较长博客文章:http://blog.jayway.com/2011/04/28/sync-asyn-pair-pattern-easy-concurrency-on-ios/
\n| 归档时间: |
|
| 查看次数: |
5604 次 |
| 最近记录: |