Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 用户返回UITabBarController选项卡时如何刷新表数据_Iphone_Json_Uitableview_Uitabbarcontroller - Fatal编程技术网

Iphone 用户返回UITabBarController选项卡时如何刷新表数据

Iphone 用户返回UITabBarController选项卡时如何刷新表数据,iphone,json,uitableview,uitabbarcontroller,Iphone,Json,Uitableview,Uitabbarcontroller,我有一个iPhone应用程序(在XCode 4中),它使用标准的选项卡栏应用程序项目模板(UITabBarController) 我的第一个视图有一个UITableView,它从JSON提要获取数据。以下是控制器加载该数据的位置: #import "FirstViewController.h" #import "SBJson.h" #import "WheelRecord.h" #import "WheelTableCell.h" #import "UIImageView+WebCache.h"

我有一个iPhone应用程序(在XCode 4中),它使用标准的选项卡栏应用程序项目模板(UITabBarController)

我的第一个视图有一个UITableView,它从JSON提要获取数据。以下是控制器加载该数据的位置:

#import "FirstViewController.h"
#import "SBJson.h"
#import "WheelRecord.h"
#import "WheelTableCell.h"
#import "UIImageView+WebCache.h"

@implementation FirstViewController

@synthesize wheels, wheelsTable;

- (NSMutableArray *) wheels {
    if (!wheels) {     
        SBJsonParser *parser = [[SBJsonParser alloc] init];        
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://wheelspotting.com/recent.json"]];            
        NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];            
        NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        NSArray *wheelData = [parser objectWithString:json_string error:nil];            
        self.wheels = [NSMutableArray array];
        for (NSDictionary *wheel in wheelData)
        {
            WheelRecord *currentWheel = [[[WheelRecord alloc] init] autorelease];
            currentWheel.title = [wheel objectForKey:@"title"];
            currentWheel.smallImage = [wheel objectForKey:@"small_image"];
            currentWheel.mediumImage = [wheel objectForKey:@"medium_image"];
            currentWheel.largeImage = [wheel objectForKey:@"large_image"];                
            [self.wheels addObject:currentWheel];
        }

    }
    return wheels;
}
每当用户选择不同的选项卡,然后返回到第一个选项卡时,我都会尝试重新加载该数据


我曾尝试在viewDidLoad中将控制盘设置为nil,ViewWill将出现,但当我切换选项卡并返回到第一个选项卡时,它从未更新(我对要测试的数据进行了更改)

您是否尝试过
[self-reloadData]
?考虑到您要更新的是UITableView FirstViewController。

我认为不会再次调用ViewDidLoad,因为所有视图控制器都将始终存在。我本以为viewwillbeen应该被调用

愚蠢的问题,但是你确定数据没有被更新吗?也许只是您的表视图没有使用新数据进行更新?您正在ViewWillDisplay或ViewDidDisplay方法中的某个位置调用[yourTableView重载数据]?或者,在if代码结束前弹出一个[yourTableView reloadData],例如

       [self.wheels addObject:currentWheel];
       [yourTableView reloadData]; // where yourTableView is the pointer to your table view
    }

选项卡栏控制器可能会很难使用,我知道我个人花了很多时间咒骂它们。要尝试的一件事是,如果您以任何方式对UIViewController进行了子类化,或者正在使用UITableViewController或UINavigationController,请确保您在inspector中为相关选项卡设置了正确的对象类型-由于过去忘了这样做,我遇到了无数问题。

是的,我没有调用reloadData。。。我假设将wheels设置为nil会迫使它再次获取数据,因为表使用了wheels。但我想它会一直保存数据,直到调用重载数据为止。我还是不太明白,但它很管用。谢谢。当一个表视图首次初始化时,它会(通过它的数据源)询问部分和单元格的数量。然后,每当一个单元格变得可见时(即通过滚动),它都会请求该单元格的内容,因此从理论上讲,如果您的数据被更新并且表格没有重新加载,那么在滚动视图时,您可能会看到一些数据通过,但也可能导致数组超出边界等(因为总计数尚未更新)。每当视图所依赖的数据发生更改时,总是最好为视图重新加载数据。