2012-12-09 47 views
1

我的問題 - 我想從DetailView中的TableView傳遞信息,但在self.detailViewController.detailItem的某處傳遞了任何值。沒有信息傳遞給DetailView Objective-c

是:

self.detailViewController.detailItem [email protected]"123"; 

NSString *sss = self.detailViewController.detailItem; 

NSLog(@"%@", sss); 

在的NSLog輸出(空)

這是我的源代碼:

DetailViewController.h

#import <UIKit/UIKit.h> 

@interface DetailViewController : UIViewController <UISplitViewControllerDelegate> 

@property id detailItem; 
@property id TitleOfDetail; 

@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel; 

@end 

DetailViewController.m

#import "DetailViewController.h" 

@interface DetailViewController() 
@property (strong, nonatomic) UIPopoverController *masterPopoverController; 
- (void)configureView; 
@end 

@implementation DetailViewController 




#pragma mark - Managing the detail item 


-(void)setTitleOfDetail:(id)newTitleOfDetail { 

    NSLog(@"123"); 

    if (_TitleOfDetail != newTitleOfDetail) { 
     _TitleOfDetail = newTitleOfDetail; 
     // Update the view. 
     [self configureView]; 
    } 
} 


-(void)setDetailItem:(id)newDetailItem 
{ 
    NSLog(@"123"); 

    if (_detailItem != newDetailItem) { 
     _detailItem = newDetailItem; 

     // Update the view. 
     [self configureView]; 
    } 

    if (self.masterPopoverController != nil) { 
     self.title = self.TitleOfDetail; 
     [self.masterPopoverController dismissPopoverAnimated:YES]; 
    }   
} 

- (void)configureView 
{ 
    // Update the user interface for the detail item. 

    NSLog(@"1%@", self.TitleOfDetail); 
    NSLog(@"2%@", [self.detailItem description]); 

    if (self.TitleOfDetail) { 
     self.title = self.TitleOfDetail; 
    } 


    if (self.detailItem) { 
     self.detailDescriptionLabel.text = [self.detailItem description]; 
    } 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self configureView]; 
} 
… 

myclass.h

@class DetailViewController; 

@interface myclass : UITableViewController 

@property DetailViewController *detailViewController; 

@end 

myclass.m

#import "choiseAvtoController.h" 
#import "DetailViewController.h" 

@interface myclass() 
@end 

@implementation myclass 

@synthesize detailViewController; 

… 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    self.detailViewController.detailItem [email protected]"123"; 

NSString *sss = self.detailViewController.detailItem; 

NSLog(@"%@", sss); 
} 

在可能是什麼問題,如何解決?

P.S.對不起,我只是在學習))

+1

我想你'當您嘗試設置detailViewController'將不會被初始化'detailItem' – wattson12

+0

@ wattson12是的,我喜歡所有連接)在另一個項目中對我有用 –

+0

你使用故事板嗎?如果答案是「是」,那麼可能會有一個非常好的備選答案。 – dasblinkenlight

回答

1

既然你使用的是一個故事板,你應該在segue上打開細節控制器。

在故事板中查找SEGUE標識符(比如,它的OpenDetail),然後將下面的代碼添加到您的初始控制器:

-(void)prepareForSegue:(UIStoryboardPopoverSegue*)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"OpenDetail"]) { 
     DetailViewController *dest = segue.destinationViewController; 
     dest.detailItem [email protected]"123"; 
    } 
}