我需要帮助从一个类到另一个类读取变量。我已经对此有了一些答案但没有成功。
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?
答案 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语言,知道你在这段代码中做错了什么,这才是真正需要解决的问题。修好。