2013-08-25 4 views
0

У меня возникли проблемы с доступом к свойству int из другого класса. Я знаю, что этот вопрос задан довольно много раз, однако ни одно из решений, опубликованных в предыдущих вопросах, похоже, не работает. Мои знания в xcode являются базовыми, и я использую этот проект для развития своих навыков.Доступ к значениям int из другого класса

У меня есть два класса: HelloWorldLayer и ClassOne. Где ClassOne указывает значение int. Оба являются классами Cocos2d CCLayer (возможно, не лучшим классом, чтобы практиковать межклассовый доступ к значениям).

ClassOne.h

@interface ClassOne : CCLayer { 
    int ageClass; 
} 
@property (nonatomic, readwrite)int ageClass; 

@end 

ClassOne.m

@implementation ClassOne 
@synthesize ageClass = _ageClass; 

-(id)init{ 
    if((self=[super init])){ 
    _ageClass = 10; 

    } 
return self; 
} 

@end 

HelloWorldLayer.h

#import "ClassOne.h" 

@interface HelloWorldLayer : CCLayer <...> { 
    ClassOne *agePointer; 
} 
@property (nonatomic,assign)ClassOne *agePointer; 
+(CCScene*)scene; 

@end 

HelloWorldLayer.m

#import "HelloWorldLayer.h" 
#import "AppDelegate.h" 
#import "ClassOne.h" 

@implementation HelloWorldLayer 
@synthesize agePointer = _agePointer; 
+(CCScene*)scene... 

-(id)init{ 
    if((self=[super init])){ 
    _agePointer.ageClass = self; 

    NSLog(@"ClassOne int = %@",_agePointer); 

    } 
return self; 
} 

... 
@end 

Выход Результат:

"ClassOne int = (null)" 

or "0" if i use "%d" token and "int = x", where the line "int x =_agePointer.ageClass;" 
is used. 

В результате я после это для HelloWorldLayer NSLog для отображения "10", значение INT, определенный в ClassOne.

Любая мудрость и исправления в отношении моего использования языка очень ценятся.

+0

что делает эту линию средств "_agePointer.ageClass = self;" ageClass - целое число, и вы пытаетесь назначить в нем объект. Я думаю, что он будет работать как: - (id) init { if ((self = [super init])) { _agePointer = [[ClassOne alloc] init]; NSLog (@ "ClassOne int =% d", _ agePointer.ageClass); } return self; } –

+0

Я использовал этот вопрос в качестве руководства [link] (http://stackoverflow.com/questions/9371125/accessing-a-value-of-a-classs-variable-from-another-objective-c). У меня создалось впечатление, что эта строка присваивает значение «ageClass» «_agePointer». –

+1

Это решило. Спасибо, Prateek, если вы опубликуете это как ответ, я его приму. –

ответ

0

Ok Попробуйте:

-(id)init 
{ 
    if((self=[super init])){ 
     _agePointer = [[ClassOne alloc] init]; 
     NSLog(@"ClassOne int = %d",_agePointer.ageClass); 
    } 
    return self; 
} 
0

Прежде всего, при выводе int всегда используйте %d вместо %@ в вашем NSLog.

Во-вторых, если вы ожидаете выхода 10, то должен был экземпляр класса первым в своем HelloWorldLayer.m:

-(id)init{ 
    if (self = [super init]) { 
    _agePointer = [[ClassOne alloc] init]; 

    NSLog(@"ClassOne int = %@",_agePointer); 
    } 
    return self; 
} 
+0

Спасибо Энрико, что нужно было инициировать класс. –

Смежные вопросы