我想简单地从另一个班级获得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
。我做错了什么?
答案 0 :(得分:1)
Class2 *secondClass = [[Class alloc] init];
创建并实例化Class
的新实例。之前没有人见过这个例子。这就是alloc
和init
所做的事情。因此,该类将具有所有字段的初始默认值。
我不确定这有多少是光顾,但提供更多信息:
像Class
或Class2
这样的类声明建立了一个模具。这是该类实例的行为设计模式。每个实例都是与模具分开制造的。
所以,例如说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方法之一中。