Iphone 如何使用NSObject子类?

Iphone 如何使用NSObject子类?,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,因此,我创建了一个名为QueryNSObject的子类 @interface Query : NSObject @property (nonatomic, assign) NSNumber *weight; @property (nonatomic, assign) NSNumber *bodyFat; @property (nonatomic, assign) NSNumber *activityLevel; @end 设置对象的属性是否正确 在VC1中: BodyFatViewCont

因此,我创建了一个名为
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;
}

不要创建新查询,只需使用以下属性:

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

不要创建新查询,只需使用以下属性:

self.query.bodyFat = [self.bodyFatArray objectAtIndex:row];
是的,没错

self.query=newQueryObject

myBodyFatViewController.query=newQueryObject

这两种方法都有效。

是的,它是正确的

self.query=newQueryObject

myBodyFatViewController.query=newQueryObject


这两种方法都有效。

在两个风投之间共享一个对象是非常自然的:

在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];

在两个VCs之间共享一个对象是非常自然的:

在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];


在以前的VC中,我设置了查询对象的一个属性(权重),现在我想设置bodyFat。我该怎么做?我有
BodyFatViewController*aViewController=[[BodyFatViewController alloc]init];aViewController.query=self.query;[self.navigationController pushViewController:aViewController动画:是]
self.query.bodyFat=[self.bodyfatary objectAtIndex:row]否,有两个单独的vcs。在VC1中,我设置了weight属性,然后将对象传递给VC2,然后在VC2中,我设置了bodyFat属性,然后将对象传递给VC3,等等。在每个VC中执行
@property Query*Query
。创建VC时,执行
VC*VC=[[VC alloc]init];vc.query=self.query
在执行推送之前,在pickerView的每个委托中执行推送操作
self.query.property=pickerView.row
。我很理解你的问题?我更新了问题。我基本上想在几个VCs之间使用一个对象。我在每个VC中设置了不同的属性,因为UI就是这样。在以前的VC中,我设置了查询对象的一个属性(权重),现在我想设置bodyFat。我该怎么做?我有
BodyFatViewController*aViewController=[[BodyFatViewController alloc]init];aViewController.query=self.query;[self.navigationController pushViewController:aViewController动画:是]
self.query.bodyFat=[self.bodyfatary objectAtIndex:row]否,有两个单独的vcs。在VC1中,我设置了weight属性,然后将对象传递给VC2,然后在VC2中,我设置了bodyFat属性,然后将对象传递给VC3,等等。在每个VC中执行
@property Query*Query
。创建VC时,执行
VC*VC=[[VC alloc]init];vc.query=self.query
在执行推送之前,在pickerView的每个委托中执行推送操作
self.query.property=pickerView.row
。我很理解你的问题?我更新了问题。我基本上想在几个VCs之间使用一个对象。我在每个VC中设置了不同的属性,因为UI就是这样。我假设您的init方法是根据模板编码的,调用super.init并分配self,对吗?我没有为
查询
对象添加init方法。这两个VC的
init
方法除了调用super-init之外什么都不做。那么你应该很好。我假设你的init方法是根据模板编码的,调用super.init并分配self,对吧?我没有为
查询
对象添加init方法。这两个VC的
init
方法除了调用super-init之外什么都不做。那么你应该很好。好吧,很完美,所以我不必在第二个VC中aloc/init一个新查询?这是自动完成的。它是由vc1完成的。Vc2获得了同一个对象的句柄。好吧,太完美了,所以我不必在第二个VC中aloc/init一个新查询?这是自动完成的。它是由vc1完成的。Vc2获取同一对象的句柄。