我遇到了麻烦:)
我无法实现我的项目,因为我无法将数据从我的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的一部分。我对我的问题感兴趣:
- (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(TEST MainView)来检查我的NSDictionary _colzaInfos中是否有东西。
所以这是我的DetailVieuw(UIVIewController)的.h和.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(TEST 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字典在任何时候都不是alloc和init ...但是我试着分配它并在detailViewController的.m中初始化它但是我的日志就在这个时候
TEST DetailView : {}
有人可以帮我理解我做错了什么。
(如果你需要我的代码的另一部分来检查一些东西......随意问。)
非常感谢您的帮助
正如你告诉我的那样,我把代码行放在这个地方,如果我错了,请告诉我。正如我在评论中所说,当我在这部分代码中直接放置断点并且当我运行程序时,断点会在NSLog之后停止进程。如果我之前尝试分配/初始化它,我什么都没有:TEST 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;
}
答案 0 :(得分:0)
将其添加到initWithNibName
中的ColzaDetailViewController.m
方法。
if (! _colzaInfos) _colzaInfos = [[NSDictionary alloc] init];
如果您使用NSArray
,则会出现同样的问题。您必须在某个时刻初始化变量才能保存数据。您只在.h
文件中声明了它。