如何使用其他类的NSNumber?

时间:2015-01-21 15:11:47

标签: ios objective-c

我想简单地从另一个班级获得NSNumber

我在Class2.h中拥有的内容:

#import "Class1.h"

@property (strong,nonatomic) NSNumber *rowTodelete;

这就是我的Class2.m的样子:

- (void)viewDidLoad {

    self.rowTodelete = 3;
}

在我的Class1.h

#import "Class2.h"

在我的Class1.m

-(void)viewDidAppear:(BOOL)animated
{

Class2 *secondClass = [[Class alloc] init];

    NSNumber *newNumber = secondClass.rowToDelete;

    NSLog(@"the new number is %@",self.newNumber);
}

我不断获得null价值。我只想从Class2获取NSNumber并将其分配给Class1中的新NSNumber。我做错了什么?

2 个答案:

答案 0 :(得分:1)

Class2 *secondClass = [[Class alloc] init];创建并实例化Class的新实例。之前没有人见过这个例子。这就是allocinit所做的事情。因此,该类将具有所有字段的初始默认值。

我不确定这有多少是光顾,但提供更多信息:

ClassClass2这样的类声明建立了一个模具。这是该类实例的行为设计模式。每个实例都是与模具分开制造的。

所以,例如说Class2有一个名为NSNumber的{​​{1}}属性,表示该类的每个单独实例都有一个可以存储数字的地方。

当您执行rowToDelete时,您会制作一个全新的课程实例。每个实例都有自己的名为alloc] init]的存储。因此,您在rowToDelete中制作的secondClass实例(对未示出的代码有一些小的假设)完全不同,并使用完全不同的存储,设置为viewDidAppear:。不同的实例,不同的存储空间。

想想self.rowToDelete之类的东西。它将为字符串中的字符使用一些存储空间。每个字符串都应该有自己的存储空间,并且对一个字符串的更改不应该影它与NSMutableString相同。

如果这两个都是视图控制器,并且选择一行的人负责显示作用于它的那个,你通常会在创建时或在segue期间推送该值,具体取决于你是否使用segues。如果是相反的话,你可能想要在两者之间使用委托协议。

如果你能提供更多的背景,我可以更具体。

答案 1 :(得分:0)

问题是你在class2的viewDidLoad

中设置了值

在ViewController加载并即将显示之前,不会调用此方法。

我不知道你想要实现什么的具体细节,但你可以将class2的超类更改为NSObject,并将赋值移动到class2的init方法。或者您可以将class2保留为viewController子类,并将赋值放在其init方法之一中。