2011-07-14 25 views
0

我正在做一個測試應用程序使用從我在我的application:didFinishLaunchingWithOptions:的appDelegate讀取plist文件數據在導航基於應用程序上市的電影。當我嘗試去第二個detailViewController我得到部分改變的標題(我得到的電影的標題,而不是在UIView.title年,我得到像「78898320」&空UIImageView & UILabels。我錯過了什麼?填充的UIView用的UIViewController在基於導航應用

Populated from my app rootViewController

Populated from my app detailViewController

這是我在RootViewController的方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath  *)indexPath 
{ 
NSLog(@"YOU SELECTED: %d",indexPath.row); 

detailViewController *detailView = [[detailViewController alloc] initWithNibName:@"detailViewController" bundle:nil]; 

NSDictionary *dict = [NSDictionary dictionaryWithDictionary: 
         [movies objectAtIndex:indexPath.row]]; 

[detailView fill:dict]; 

[self.navigationController pushViewController:detailView animated:YES]; 
[detailView release]; 

} 

這是我在detailViewController填充UIView的方法:

-(void)fill: (NSDictionary*) fillData 
{ 
//movie = [NSDictionary dictionaryWithDictionary:fillData]; 
NSLog(@"DETAILS: %@",[fillData objectForKey:@"description"]); 

self.title = [NSString stringWithFormat:@"%@ (%d)", 
       [fillData objectForKey:@"title"], 
       [fillData objectForKey:@"year"]]; 
//[movie objectForKey:@"title"]; 
self.img = [[UIImageView alloc] initWithImage: 
      [UIImage imageNamed:[fillData objectForKey:@"image"]]]; 
self.description = [fillData objectForKey:@"description"]; 
self.cast = [fillData objectForKey:@"cast"]; 
} 

當我嘗試打印使用的NSLog它打印出精美的字典中的描述。

+0

如何'self.title','self.img'。在'detailViewController'中聲明? – 2011-07-14 13:39:16

+0

沒有什麼東西會跳出來,你應該設置一個斷點並逐步完成。 –

+0

只需設置detailView.title = @「變形金剛」。你不會得到這些數字。 – Legolas

回答

1

你將不得不改變一些東西做它的工作。我猜你的所有標籤和圖像視圖實際上都在NIB文件中。

這樣做:

self.img = [[UIImageView alloc] initWithImage: 
      [UIImage imageNamed:[fillData objectForKey:@"image"]]]; 

你實際上是打破了NIB文件的屬性和對象之間的連接,用一個全新的實例替換它。除非手動添加新的視圖,否則不會顯示任何內容。

嘗試使用:

[self.img setImage:[UIImage imageNamed:[fillData objectForKey:@"image"]]]; 

這同樣適用於:

self.description = [fillData objectForKey:@"description"]; 
self.cast = [fillData objectForKey:@"cast"]; 

嘗試,而不是:

[self.description setText:[fillData objectForKey:@"description"]]; 
[self.cast setText:[fillData objectForKey:@"cast"]]; 
+0

是的確的..當我通過我的'fillData:'方法中的NSDictionary傳遞數據&我使用'ViewWillAppear:'方法中的數據來填充我的屬性..它實際上工作..謝謝你! – Kex

2

您正在使用%d的對象,您開始使用

[fillData objectForKey:@"year"] 

您應該使用%@,而不是因爲它是最有可能的一個NSNumber對象。

+0

你說得對。我應該在我的NSLog中使用'%@'。 現在,這部分工作正常,但爲什麼我的UIImageView&UILabels不填充? – Kex

+0

你在哪裏填充它們?正確的點將是'viewDidLoad'或'viewWillAppear:',因爲出口連接並不在它之前。如果你已經這樣做,然後檢查你的插座連接。 –

+0

我的IBOutlet連接很好..現在我試圖在FillData方法中初始化一個NSDictionary,稍後使用它填充ViewWillAppear中的UIImageView&UILabels ..當它到達那裏NSDictionary包含數據但它沒有填充它們。 – Kex

0
-(void)fill: (NSDictionary*) fillData 
{ 
    //movie = [NSDictionary dictionaryWithDictionary:fillData]; 
    NSLog(@"DETAILS: %@",[fillData objectForKey:@"description"]); 

    self.title = [NSString stringWithFormat:@"%@ (%d)", 
      [fillData objectForKey:@"title"], 
      [[fillData objectForKey:@"year"] intValue]]; 
    //[movie objectForKey:@"title"]; 
    self.img = [[UIImageView alloc] initWithImage: 
      [UIImage imageNamed:[fillData objectForKey:@"image"]]]; 
    self.description = [fillData objectForKey:@"description"]; 
    self.cast = [fillData objectForKey:@"cast"]; 
} 

如果你沒有得到的圖像查看圖像,因爲烏爾不設置它的框架和您不添加它來查看(ATLEAST這裏)......