2012-03-14 37 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

相關問題