无法从UITableViewController“传递数据”到UIViewController

时间:2012-03-14 15:51:37

标签: uiviewcontroller uitableview

我遇到了麻烦:)

我无法实现我的项目,因为我无法将数据从我的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;
}

1 个答案:

答案 0 :(得分:0)

将其添加到initWithNibName中的ColzaDetailViewController.m方法。

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

如果您使用NSArray,则会出现同样的问题。您必须在某个时刻初始化变量才能保存数据。您只在.h文件中声明了它。