在Objective-C中访问来自不同类的变量

时间:2012-09-02 11:39:49

标签: objective-c ios

我需要帮助从一个类到另一个类读取变量。我已经对此有了一些答案但没有成功。

PP.h:

@interface PP : UIViewController
{
@public int fNum;
}

@property (readwrite, nonatomic) int fNum;

- (IBAction)setSomeNum;

@end

PP.m:

@synthesize fNum;

- (IBAction)setSomeNum
{
fNum = 69;
NSLog(@"Set Num Activated %d",fNum); //OK
}

TryView.m:

#import "TryView.h"
#import "PP.h"

@interface TryView ()

@end

@implementation TryView
- (void)viewDidLoad
{
[super viewDidLoad];

PP *obj ;
int x = obj.fNum;
NSLog(@"Happines %d",x); //Prints 0
}
@end

有什么问题,为什么打印0?

2 个答案:

答案 0 :(得分:8)

你正在做的事情本质上是未定义的行为,所以很高兴它没有崩溃。

PP *obj ;
int x = obj.fNum;

基本上是错误的 - 你没有创建/初始化对象,所以obj是一个悬空指针,它可以指向任何一个(即垃圾)并在访问时崩溃。即使您创建了对象,也应该在其上调用setSomeNum方法 - 它不会被自动调用(为什么要这样?)。总而言之,你必须写下这个:

PP *obj = [[PP alloc] init];
[obj setSomeNum];
int x = obj.fNum;

答案 1 :(得分:1)

请请阅读一些基本参考资料,例如http://developer.apple.com/library/ios/#documentation/general/conceptual/devpedia-cocoacore/accessormethod.html您没有正确使用KVO,您正在使用IBActions作为制定者。

您的实际问题是您在没有实际创建对象的情况下声明对象:

PP *obj ;

int x = obj.fNum;
NSLog(@"Happines %d",x); //Prints 0

但是,严重的是,这不是问题 - 真正的问题是你不能很好地了解Objective-C语言,知道你在这段代码中做错了什么,这才是真正需要解决的问题。修好。