2011-06-06 48 views
5

Trong ứng dụng iphone Tôi cần truyền một số giá trị cho đối tượng viewcontroller mới trong khi nó tạo từ phương thức trong lớp viewcontroller khác để tôi có thể khởi tạo giá trị đó trong (id) initWithNibName: method của new viewcontroller Tôi có thể tải các giá trị đó trong phương thức viewdidLoad.Tham số truyền bằng initWithNibName:

những gì tôi muốn biết là làm cách nào để chuyển các giá trị (tham số) tới hàm tạo (initWithNibName) của một trình điều khiển xem mới Đối tượng như hàm nạp quá tải trong java cho tôi một số ví dụ mã chỉ hiển thị cách initWithNibName gọi với tham số bổ sung và làm thế nào để lấy lại chúng trong mới được tạo ra đối tượng Thanks ...


trả lời


đây là cách tôi giải quyết vấn đề "Quan sát là một đối tượng wit h thuộc tính" trong ViewControllor.h tôi đặt

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil set:(Observation *)observation; 

trong tập tin ViewControllor.m tôi đặt

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil set:(Observation *)observation{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization on passed parameter observation object   
    draftObservation = observation; 
} 
return self; 

}

sau đó tôi gọi nó theo cách này trong lớp khác

ObsevationListView *obsevationListView = [[ObservationViewControllor alloc] 
              initWithNibName:@"ObservationViewControllor" 
              bundle:nil set:observer]; 
[self.navigationController pushViewController:obsevationListView animated:YES]; 

hoạt động tốt. Tôi rất vui nếu có ai có được sự giúp đỡ từ này

+0

Rất đẹp ... Tôi chính xác muốn điều này ... Cảm ơn một tấn. – viral

Trả lời

7

Bạn nên tạo một initializer trong lớp học của bạn, một cái gì đó giống như

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil andParam:(id)aParam { 
... 
self.param = aParam; 
} 
+0

Và đừng quên khai báo rằng initializer trong của bạn .h (upvotted) – Jorge

+0

Ngoài ra dòng đầu tiên của bạn ở bên mà initializer nên là: 'self = [self initWithNibName: nibNameOrNil bundle: nibBundleOrNil];' để khởi tạo thích hợp. – JeroenEijkhof

+0

Cảm ơn các bạn tôi đã làm điều đó với sự giúp đỡ của bạn. tạo một bộ khởi tạo khác và truyền đối tượng với dữ liệu và tải dữ liệu đó vào các trường trong phương thức viewDidLoad –

0

Một giải pháp khác là phải có một tài sản cho tham số đó và đặt trước hoặc sau khi bạn gọi bằng cách sử dụng mã sau:

initWithNibName:bundle:

Các vấn đề liên quan