2013-02-07 60 views
0

正如我新手我理解如何使用點符號創建和訪問一個對象的屬性..例如,我有一個對象golfCourse與財產courseName所以golfCourse.courseName = @「我的課程」工程確定。我的問題是,如果我創建一個包含Par和Distance的「holeObject」,並在我的Course Object內創建Hole1,Hole2等試圖通過golfCourse.Hole1.Par返回null ...我的各種搜索沒有找到我任何清晰..有人能指引我正確的方向嗎?如何在Xcode/Obj C中的另一個自定義對象中訪問對象的屬性?

非常感謝

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 

然後在我的主視圖控制器..

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


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

    thisCourse=[[CourseObject alloc]init]; 
    [email protected]"Branston"; 
    [email protected]"The World"; 

    [email protected]"4"; 

    [email protected]"336"; 

但如果我再嘗試的NSLog thisCourse.hole1.par即時得到空?

感謝您的期待。

+0

你能提供一些與你的問題相關的示例代碼? –

+0

與你的問題沒有直接關係,但可能會讓你的事情在未來變得更容易一些......而不是創建18個(就像你在'答案'中所說的)洞屬性,你可以創建一個屬性爲NSArray(或NSMutableArray),稱之爲「洞」,並在其中創建18個洞。您仍然需要初始化'holes'屬性以及18個洞,但是您可以將18個初始化變成一個循環,從而大大減少代碼量。此外,你可以在周圍傳遞'NSInteger'(或類似的東西),並使用該索引指向該課程的特定孔。 – Kitsune

回答

0

花了一些時間嘗試不同的東西,因爲它很清楚Null顯示對象沒有正確創建..發現[[CourseObject alloc] init]實際上沒有爲對象「sub - 對象「,我需要做所有18洞course.hole1 = [[HoleObject分配]初始化]以及...位很煩,但似乎工作..

相關問題