2012-03-14 67 views
0

我在烦恼:)无法从一个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; 
} 

回答

0

添加到您的initWithNibName方法ColzaDetailViewController.m

if (! _colzaInfos) _colzaInfos = [[NSDictionary alloc] init]; 

这是同一个问题,如果你使用NSArray。你必须在某个时刻初始化变量才能保存数据,你只在中声明它3210文件。

+0

嗨,谢谢你的帮助。我只是试图把你给我的代码行放在你告诉我的地方,但它没有改变任何东西。我已经把一个断点放到了我输入代码行的地方,并且我看到函数“ViewDidLoad”首先被加载。所以在断点停止的过程中,我已经有了“Null”的detailView打印日志。我已经尝试将该行直接放在viewDidLoad中,但是这次它使得我已经尝试过的相同的事情,我什么都没有......只是“测试DetailView”:{}。我真的不明白为什么它不起作用:( – Romain 2012-03-14 19:37:27

+0

也许重要的是你知道我使用故事板(也许我必须做一些特别的事情,特别是在这种情况下),我有一个TabBarController“管理“几个UITableViewControllers(实际上6 ...都是”ColzaViewController“的唯一标识符,只是Xml链接的改变),我更喜欢给你这些信息。 – Romain 2012-03-14 20:50:36

相关问题