-4

我需要帮助才能将变量从一个类读取到另一个类。我已经关注了一些关于此的答案,但没有成功。

PP.h:

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

@property (readwrite, nonatomic) int fNum;

- (IBAction)setSomeNum;

@end

米:

@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?

4

2 回答 2

8

你所做的基本上是未定义的行为,所以很高兴它没有崩溃。

PP *obj ;
int x = obj.fNum;

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

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

等等

于 2012-09-02T11:43:24.487 回答
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 语言的了解不够透彻,无法知道你在这段代码中做错了什么,而这才是真正需要解决的问题。

于 2012-09-02T11:46:03.123 回答