求助pushViewController跳转页面之后TableView不加载数据的问题
1个回答
2015-01-24 · 知道合伙人影视综艺行家
关注
展开全部
工程使用的Storyboard,在第一个页面跳转到第二个页面时候需要显示一个新闻的列表,以前是使用的
[self performSegueWithIdentifier:@"ShowSubColumn" sender:self];
完全正常,只是不能显示Navigationbar
为了能正常显示Navigationbar,我将跳转方式改成了
[self.navigationController pushViewController:newsListView animated:YES];
结果在第二个页面列表就不加载了。通过断点查看发现
self.newsListTable=0x000000000也就是说这个页面的UItableView都没有成功分配内存,而且
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
和
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
都没有执行。
//这是第一个页面的跳转部分
//很奇怪的是我就修改了这里,将performSegueWithIdentifier改成pushViewController的方式就出现问题了
//点击列表的行跳转页面
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *str=[columnCodeArray objectAtIndex:indexPath.row];
int columnCode=[str integerValue];
int i=[self checkColumnCode:columnCode];
if (i==kColumnNoSub) {
NewsListViewController *newsListView=[[NewsListViewController alloc]init];
newsListView.columnCode=columnCode;
[self.navigationController pushViewController:newsListView animated:YES];
}
else
{
//本来是用的这样的跳转方式
// [self performSegueWithIdentifier:@"ShowSubColumn" sender:self];
}
}
//这里使用的一个子线程来获取服务器返回的数据
-(void)useSubThreadConnect
{
subThread=[[NSThread alloc]initWithTarget:self selector:@selector(connectServerse) object:nil];
[subThread start];
}
-(void)connectServerse
{
NSString *requestStr=[comTool getConnectStringWithURL:kaYingURL WithCode:columnCode WithPage:getNewsPage];
NSURL *URL=[NSURL URLWithString:requestStr];
NSURLRequest *request=[[NSURLRequest alloc]initWithURL:URL];
NSURLConnection *connect=[[NSURLConnection alloc]initWithRequest:request delegate:self];
while(!finished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
request=nil;
connect=nil;
}
//当连接成功获得数据时执行
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
//获取服务器返回的数据
NSString *tempString = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];
[outString appendString:tempString];
// NSLog(@"%@", outString);
}
//当连接错误时执行
-(void) connection:(NSURLConnection *)connection
didFailWithError: (NSError *)error {
//弹出一个错误信息对话框
// [comTool showErrorAlertWithError:error];
[subThread cancel];
}
//当获取数据结束时执行
- (void) connectionDidFinishLoading: (NSURLConnection*) connection {
articleArray = [MainViewControllerDelegate getArticleArray:outString isImageNews:NO];//获取到转换成Article对象数组
finished=YES;
[subThread cancel];
[self.newsListTable reloadData];
}
[self performSegueWithIdentifier:@"ShowSubColumn" sender:self];
完全正常,只是不能显示Navigationbar
为了能正常显示Navigationbar,我将跳转方式改成了
[self.navigationController pushViewController:newsListView animated:YES];
结果在第二个页面列表就不加载了。通过断点查看发现
self.newsListTable=0x000000000也就是说这个页面的UItableView都没有成功分配内存,而且
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
和
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
都没有执行。
//这是第一个页面的跳转部分
//很奇怪的是我就修改了这里,将performSegueWithIdentifier改成pushViewController的方式就出现问题了
//点击列表的行跳转页面
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *str=[columnCodeArray objectAtIndex:indexPath.row];
int columnCode=[str integerValue];
int i=[self checkColumnCode:columnCode];
if (i==kColumnNoSub) {
NewsListViewController *newsListView=[[NewsListViewController alloc]init];
newsListView.columnCode=columnCode;
[self.navigationController pushViewController:newsListView animated:YES];
}
else
{
//本来是用的这样的跳转方式
// [self performSegueWithIdentifier:@"ShowSubColumn" sender:self];
}
}
//这里使用的一个子线程来获取服务器返回的数据
-(void)useSubThreadConnect
{
subThread=[[NSThread alloc]initWithTarget:self selector:@selector(connectServerse) object:nil];
[subThread start];
}
-(void)connectServerse
{
NSString *requestStr=[comTool getConnectStringWithURL:kaYingURL WithCode:columnCode WithPage:getNewsPage];
NSURL *URL=[NSURL URLWithString:requestStr];
NSURLRequest *request=[[NSURLRequest alloc]initWithURL:URL];
NSURLConnection *connect=[[NSURLConnection alloc]initWithRequest:request delegate:self];
while(!finished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
request=nil;
connect=nil;
}
//当连接成功获得数据时执行
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
//获取服务器返回的数据
NSString *tempString = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];
[outString appendString:tempString];
// NSLog(@"%@", outString);
}
//当连接错误时执行
-(void) connection:(NSURLConnection *)connection
didFailWithError: (NSError *)error {
//弹出一个错误信息对话框
// [comTool showErrorAlertWithError:error];
[subThread cancel];
}
//当获取数据结束时执行
- (void) connectionDidFinishLoading: (NSURLConnection*) connection {
articleArray = [MainViewControllerDelegate getArticleArray:outString isImageNews:NO];//获取到转换成Article对象数组
finished=YES;
[subThread cancel];
[self.newsListTable reloadData];
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询