2012-04-07 150 views
0

所以我創建的NSObject的子類,稱爲Query如何使用NSObject子類?

@interface Query : NSObject 

@property (nonatomic, assign) NSNumber *weight; 
@property (nonatomic, assign) NSNumber *bodyFat; 
@property (nonatomic, assign) NSNumber *activityLevel; 

@end 

這是正確的設置對象的屬性?

在VC1:

BodyFatViewController *aViewController = [[BodyFatViewController alloc]init]; 
aViewController.query = self.query; 
[self.navigationController pushViewController:aViewController animated:YES]; 

在VC2:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    Query *anQuery = [[Query alloc]init]; 
    anQuery.bodyFat = [self.bodyFatArray objectAtIndex:row]; 
    anQuery.weight = self.query.weight; 
    self.query = anQuery; 
} 
+0

我假設你的init方法編碼根據模板,通過調用super.init和自我的分配,對不對? – dasblinkenlight 2012-04-07 23:16:08

+0

我還沒有爲'Query'對象添加一個init方法。任何一個VC的'init'方法都不會執行超級調用的任何操作。 – Jon 2012-04-07 23:30:30

+0

你應該那麼好。 – dasblinkenlight 2012-04-07 23:32:03

回答

2

這是完全自然的兩名風險投資之間共享的對象:

在VC1

@property (strong, nonatomic) Query *query; 
@synthesize query=_query; 

// init it 
self.query = [[Query alloc] init]; 
self.query.weight = [NSNumber numberWithInt:150]; 

// when it's time to present VC2: 
BodyFatViewController *aViewController = [[BodyFatViewController alloc]init]; 
aViewController.query = self.query; 
[self.navigationController pushViewController:aViewController animated:YES]; 

,然後在VC2:

// this is in the public interface in VC2.h 
// 
@property (strong, nonatomic) Query *query; 

不要在分配/初始化它VC2。 VC1做到了!但隨意設置或覆蓋值...

self.query.bodyFat = [NSNumber numberWithFloat:0.5]; 
+0

好的完美,所以我不必在第二個VC中創建一個新的查詢?這是自動完成的 – Jon 2012-04-08 00:44:37

+0

是的。它由vc1完成。 Vc2獲取相同對象的句柄。 – danh 2012-04-08 02:09:36

1

不要創建一個新的查詢簡單地使用屬性:

self.query.bodyFat = [self.bodyFatArray objectAtIndex:row]; 
+0

在前面的VC中,我設置了查詢對象的一個​​屬性(重量),現在我想設置bodyFat。我怎樣才能做到這一點?我有'BodyFatViewController * aViewController = [[BodyFatViewController alloc] init]; \t aViewController.query = self.query; \t [self.navigationController pushViewController:aViewController animated:YES];' – Jon 2012-04-07 23:14:48

+0

'self.query.bodyFat = [self.bodyFatArray objectAtIndex:row];' – Jpellat 2012-04-07 23:17:41

+0

不,有2個獨立的vcs。在VC1中,我設置了weight屬性,然後將對象傳遞給VC2,然後在VC2中設置bodyFat屬性,然後將對象傳遞給VC3等。 – Jon 2012-04-07 23:20:04

0

是的,這是正確的。

self.query = newQueryObject

myBodyFatViewController.query = newQueryObject

兩個工作。