2012-04-07 38 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

两个工作。