0

我正在开发一个新的 iOS 应用程序。在这个应用程序中,我有一个幻灯片菜单。我想用异步请求动态创建这个菜单。这是一种新的 LinkedIn 菜单,如下所示:

领英菜单

此菜单每十秒(或更少)自动更新表格视图的其中一行,在另一行中您有一些个人资料信息(姓名、图片...),您还可以更新消息和通知图标。

我想知道如何同时管理所有这些请求。我打算使用AFNetworking,我认为这是最好的选择。但我不知道如何管理多个异步请求并在表格视图中设置所有日期。

我希望从请求中每十秒更新一次行,必须从其他请求创建其他行,例如,第一行,我的个人资料信息(姓名,图片...),第二行:优惠(更新每个十秒)。第三、第四等。朋友们从另一个请求中获得他们的信息。所以最后我需要至少三个请求。这是一个例子,但我想要的是相似的

4

3 回答 3

2

您应该保留表格视图的影子数据结构 - 您的数据模型。当您的异步数据进入更新模型时,然后分派一个块来更新主线程上的 UI。

UI 更新方法向表格视图询问可见单元格数组。它将这些与数据模型(使用适当的锁)进行比较,然后根据需要更新单元格内容。

通过使用表格部分,您可以更轻松地确定何时插入或删除单元格。

当用户滚动表格时,您总是查看模型以了解要显示的内容。

于 2013-05-15T11:38:31.590 回答
0

这真的取决于你想要实现什么样的行为。如果您希望每 10 秒一次,只需进行一次异步调用,并在触发回调时更新您的 UiTableView 内容。现在您说:“如何同时管理所有这些请求?”。事实上,您一次只打一个电话。

于 2013-05-15T04:12:06.737 回答
0

如果你想同时管理多个请求,AFNetworking 让它变得非常简单,只需使用:

- (void)enqueueBatchOfHTTPRequestOperations:(NSArray *)operations 
                          progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock 
                        completionBlock:(void (^)(NSArray *operations))completionBlock;

或者

- (void)enqueueBatchOfHTTPRequestOperationsWithRequests:(NSArray *)urlRequests
                                      progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock 
                                    completionBlock:(void (^)(NSArray *operations))completionBlock;

例子:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]];
NSURLRequest *otherRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]];

AFHTTPRequestOperation *operationForImages = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operationForImages setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    //success of images request
    self.imageDictionary = responseObject;

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    //manage error for this request

}];
AFHTTPRequestOperation *operationForText = [[AFHTTPRequestOperation alloc] initWithRequest:otherRequest];
[operationForText setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    //success of text request
    self.textDictionary = responseObject;

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    //manage error for this request

}];


[[ElCuratorAPIClient sharedClient] enqueueBatchOfHTTPRequestOperations:@[operationForImages,operationForText] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {

    //track progression of requests

} completionBlock:^(NSArray *operations) {

    //all the request are completed

}];
于 2013-05-15T14:44:48.703 回答