我在烦恼:)无法从一个UITableViewController“传递数据”到一个UIViewController
我无法acheive我的项目,因为我无法从我的UITableView的数据传递给的DetailView(UIViewController中)
我是初学者,所以我当然做错了什么,但我不知道是什么。我有红色的几个教程,它似乎是好的...但它不是!
这里是我的UITableViewController的.H:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "XMLParser.h"
#import "ColzaDetailViewController.h"
@interface ColzaViewController : UITableViewController <XMLParserDelegate>
{
XMLParser *parser;
NSDictionary *colzaInfos;
}
@property (nonatomic, retain) NSDictionary *colzaInfos;
@end
我已创建一个NSDictionary存储我要传递给的DetailView(ColzaDetailViewController)数据
这里是我UITalbeViewController的一部分.H至极的interresting我的问题:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ColzaDetailViewController *detailViewController = [[ColzaDetailViewController alloc] initWithNibName:@"ColzaDetail" bundle:[NSBundle mainBundle]];
colzaInfos = [parser.stories objectAtIndex:indexPath.row];
detailViewController._colzaInfos = colzaInfos;
[self.navigationController pushViewController:detailViewController animated:YES];
NSLog(@"TEST MainView : %@", detailViewController._colzaInfos);
detailViewController = nil;
}
我觉得一切都确定在这里。我已经把一个NSLog(测试MainView)来检查是否有我的NSDictionary _colzaInfos中的东西。
因此,这里有我的.h和我DetailVieuw(UIViewController中)的.M
.H
#import <UIKit/UIKit.h>
#import "ColzaViewController.h"
@interface ColzaDetailViewController : UIViewController
{
IBOutlet UILabel *colzaSettle;
NSDictionary *_colzaInfos;
}
@property (nonatomic, strong) NSDictionary *_colzaInfos;
@property (nonatomic, retain) IBOutlet UILabel *colzaSettle;
@end
.M
#import "ColzaDetailViewController.h"
@implementation ColzaDetailViewController
@synthesize _colzaInfos, colzaSettle;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
// Implement loadView to create a view hierarchy programmatically, without using a nib.
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
colzaSettle = [_colzaInfos objectForKey:kCloture];
NSLog(@"TEST DetailView : %@", _colzaInfos);
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
正如你可以在viewDidLoad中看到的,我已经把第二个NSLog(测试DetailView)为了再次检查,如果我的字典中有东西
这里是日志:
2012-03-14 16:23:54.240 Mobile Settles[7173:f803] TEST DetailView : (null)
2012-03-14 16:23:54.241 Mobile Settles[7173:f803] TEST MainView : {
date = "13/03/2012\n ";
echeance = "Ao\U00fbt 2012\n ";
settle = "453.25\n ";
variation = "5.75";
}
所以你可以看到日志的DetailView为NULL,但在的MainView包含数据。
但我需要在DetailView中获取这些数据才能显示它们。
对于我来说,在这一步看起来“奇怪”的唯一情况是_colzaInfos字典不是随时分配和初始化的......但我试图分配它并在detailViewController的.m中初始化它,但是我的日志是在这个时候
TEST DetailView : {}
有人可以帮助我了解我做错了什么。
(如果你需要我的代码另一部分检查一番......随便问。)
非常感谢帮助
当你告诉我这样做,我有把代码行放在这个地方,请让我知道,如果我错了。正如我在评论中所说的那样,当我在这部分代码中直接放置断点时,以及当我运行程序时,断点将停止NSLog之后的进程。如果我尝试分配/ init之前,我什么也没有:测试detailView:{}。
很抱歉,但它不工作:(
代码:
@implementation ColzaDetailViewController
@synthesize _colzaInfos, colzaSettle;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
if (! _colzaInfos)
_colzaInfos = [[NSDictionary alloc] init];
}
return self;
}
嗨,谢谢你的帮助。我只是试图把你给我的代码行放在你告诉我的地方,但它没有改变任何东西。我已经把一个断点放到了我输入代码行的地方,并且我看到函数“ViewDidLoad”首先被加载。所以在断点停止的过程中,我已经有了“Null”的detailView打印日志。我已经尝试将该行直接放在viewDidLoad中,但是这次它使得我已经尝试过的相同的事情,我什么都没有......只是“测试DetailView”:{}。我真的不明白为什么它不起作用:( – Romain 2012-03-14 19:37:27
也许重要的是你知道我使用故事板(也许我必须做一些特别的事情,特别是在这种情况下),我有一个TabBarController“管理“几个UITableViewControllers(实际上6 ...都是”ColzaViewController“的唯一标识符,只是Xml链接的改变),我更喜欢给你这些信息。 – Romain 2012-03-14 20:50:36