ios - 试图管理大型 UITableView 数据结构

标签 ios objective-c uitableview

我有一个 UINavigationController,它从网络服务中获取项目。我调用 Web 服务 - 它检查是否有更多项目要加载 - 如果有 - 我使用来自 Web 服务的新数据加载同一 viewController 的新实例。这很好用。

我还做的是显示一个“正在加载”屏幕,这又是同一 View Controller 的另一个实例,只有一个 UITableViewCell 表示正在加载。这提供了很好的体验,并且在 Web 服务繁忙时没有 UI 锁定。

当没有更多项目要显示时(只有在 Web 服务恢复后才能知道这一点),我将一个新的 View Controller 压入堆栈 - 我们称它为 viewControllerB

所以它是这样工作的:

当我们从 Web 服务返回更多项目时:

UITableViewCell 被点击 -> Web 服务调用 开始 -> 当前 viewControllerA 的新实例被推送到带有“加载单元”的堆栈上 -> 来自 WebService 的 more items - 使用更多数据重新加载 viewController 的当前实例。

当我们没有从 Web 服务取回项目时:

UITableViewCell 被点击 -> Web 服务调用 开始 -> 当前 viewControllerA 的新实例被推送到带有“加载单元”的堆栈上 -> 没有更多的项目从 WebService -push 到 viewControllerB

现在的问题是,当我从 viewControllerB 返回到 viewControlerA 时,我得到了“正在加载更多”屏幕并且必须再返回一个级别到最后一组结果在 viewControllerA

我怎样才能绕过加载屏幕并直接转到最后的结果?

最后,有没有另一种方法可以在不将同一 View Controller 的新实例加载到堆栈上的情况下执行此操作?同时保留前一屏幕的数据?

最佳答案

您可以对服务器使用异步请求,该操作将在另一个线程中进行,因此您的应用程序不会卡住主线程。这是一个简单的例子:

-(void) myFuncToServerRequest{

    [self setLoading];

    NSMutableString *post = [NSMutableString stringWithString:@"mykey="];
    [post appendString:@"myValue"];

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

    NSString *urlApi = @"yoursite.com";

    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];
    [request setHTTPMethod:@"POST"];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
        [self unselectLoading];
        if (error){

        }
        else{
        // return to main thread
        dispatch_async(dispatch_get_main_queue(), ^{
                   // Do what you want with your data
                });


        }
    }];
}

我的键和我的值是请求的参数,您可以在 post 变量后附加更多键和值字符串。

关于ios - 试图管理大型 UITableView 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304137/

相关文章:

objective-c - 第二次点击后搜索方法不起作用

ios - UITableView 是否使用 dequeueReusableCellWithIdentifier?

ios - 如何在特定位置将View添加到ScrollView?

ios - 在 TableView 中显示之前过滤数组结果

ios - 点击 UITableViewCell 时数组索引超出范围,无论是否使用 didselectrowatindex 方法

ios - 在 ios 桌面和任何其他应用程序的前景中的按钮

ios - Apple TV第4代中的Powerpoint

ios - 从 WatchKit 发送数据流

iphone - 在后台线程上将 SVG XML NSString 转换为 UIImage

objective-c - TableView 背景颜色不变