Object 在Xcode/Obj C中的另一个自定义对象中,如何访问对象的属性?

Object 在Xcode/Obj C中的另一个自定义对象中,如何访问对象的属性?,object,properties,null,setter,getter,Object,Properties,Null,Setter,Getter,作为一名新手,我有点了解如何使用点符号创建和访问对象的属性。。例如,我有一个带有属性courseName的对象golfCourse,因此golfCourse.courseName=@“我的课程”工作正常。我的问题是,如果我创建一个包含“Par”和“距离”的“HOLIOVER”,并在我的课程对象中创建HOLE1、HOLE2等,试图通过GalfCube来访问它们。我的各种搜索都没有发现任何清晰性。。有人能给我指出正确的方向吗 非常感谢 HoleObject.h #import <Founda

作为一名新手,我有点了解如何使用点符号创建和访问对象的属性。。例如,我有一个带有属性courseName的对象golfCourse,因此golfCourse.courseName=@“我的课程”工作正常。我的问题是,如果我创建一个包含“Par”和“距离”的“HOLIOVER”,并在我的课程对象中创建HOLE1、HOLE2等,试图通过GalfCube来访问它们。我的各种搜索都没有发现任何清晰性。。有人能给我指出正确的方向吗

非常感谢

HoleObject.h

#import <Foundation/Foundation.h>

@interface HoleObject : NSObject

@property(nonatomic,strong) NSString* par;
@property(nonatomic,weak) NSString* yellowDistance;
@end

HoleObject.m
#import "HoleObject.h"

@implementation HoleObject

@synthesize
par=_par,
yellowDistance=_yellowDistance,


-(void) encodeWithCoder:(NSCoder*)encoder
{
  [encoder encodeObject:self.par forKey:@"Par"];
  [encoder encodeObject:self.yellowDistance forKey:@"YellowDistance"];

}

-(id) initWithCoder:(NSCoder*)decoder
{
  if((self=[super init]))
  {
    self.par=[decoder decodeObjectForKey:@"Par"];
    self.yellowDistance=[decoder decodeObjectForKey:@"YellowDistance"];
   }
  return  self;
}
@end

CourseObject.h
#import <Foundation/Foundation.h>
#import "HoleObject.h"

@interface CourseObject : NSObject

@property(nonatomic,strong)NSString* courseName;
@property(nonatomic,strong)NSString* courseAddress;
@property(nonatomic,strong)HoleObject* hole1;
@property(nonatomic,weak)HoleObject* hole2;
etc...
@end

CourseObject.m
#import "CourseObject.h"

@implementation CourseObject

@synthesize
courseName=_courseName,
courseAddress=_courseAddress,
hole1=_hole1,
 etc;

-(void) encodeWithCoder:(NSCoder*)encoder
{
  [encoder encodeObject:self.courseName forKey:@"CourseName"];
  [encoder encodeObject:self.courseName forKey:@"CourseAddress"];
  [encoder encodeObject:self.hole1 forKey:@"Hole1"];
  etc;  
}

-(id) initWithCoder:(NSCoder*)decoder
{
  if((self = [super init]))
  {
    self.courseName=[decoder decodeObjectForKey:@"CourseName"];
    self.courseAddress=[decoder decodeObjectForKey:@"CourseAddress"];
    self.hole1 = [decoder decodeObjectForKey:@"Hole1"];
    self.hole2 = [decoder decodeObjectForKey:@"Hole2"];
etc;
  }
  return self;
}   

@end
<>但是如果我尝试NSLAMP这个课程,HOLE1.PAR IM得到null?< /P>
感谢您的关注。

花了一些时间尝试不同的东西,因为很明显,空值表示对象创建不正确。。发现[[CourseObject alloc]init]实际上没有对对象“子对象”执行任何操作,我需要对所有18个孔执行course.hole1=[HoleObject alloc]init]。。。有点烦琐,但似乎有效..

您能提供一些与您的问题相关的示例代码吗?与您的问题没有直接关系,但可能会让您将来的工作更轻松一些。。。您可以创建一个NSArray(或NSMutableArray)属性,将其称为类似于
孔的东西,并在其中创建18个孔,而不是创建18个孔属性(如您在“答案”中所述)。您仍然需要初始化
holes
属性以及18个holes,但是您可以将18个初始化变成一个循环,从而大大减少代码量。此外,您还可以传递一个
NSInteger
(或类似)并使用该索引指向该球场的特定洞。
- (void)viewDidLoad
{
    [super viewDidLoad];


  allCourses=[[NSMutableArray alloc] initWithCapacity:2];
  CourseObject*thisCourse;

  thisCourse=[[CourseObject alloc]init];
  thisCourse.courseName=@"Branston";
  thisCourse.courseAddress=@"The World";

  thisCourse.hole1.par=@"4";

  thisCourse.hole1.yellowDistance=@"336";