Objective c 在模型类中指定给特性的值将在视图/控制器类中消失

Objective c 在模型类中指定给特性的值将在视图/控制器类中消失,objective-c,ios5,xcode4.3,Objective C,Ios5,Xcode4.3,就在我的模型类发送变量stringToDisplay之前,NSLog向我显示它有一个值。但是当我尝试在ViewController中使用它时,我只得到(null)。有没有想过我做错了什么 (好消息是,在这方面的工作中,我在理解模型和控制器之间的关系方面取得了某种突破。我仍然是一个完全的新手,但我并没有像以前那样感到失落。) 以下是我认为相关的代码: 计算雨 #import <Foundation/Foundation.h> @interface CalculatorBrain :

就在我的模型类发送变量
stringToDisplay
之前,NSLog向我显示它有一个值。但是当我尝试在ViewController中使用它时,我只得到
(null)
。有没有想过我做错了什么

(好消息是,在这方面的工作中,我在理解模型和控制器之间的关系方面取得了某种突破。我仍然是一个完全的新手,但我并没有像以前那样感到失落。)

以下是我认为相关的代码:

计算雨

#import <Foundation/Foundation.h>

@interface CalculatorBrain : NSObject
@property (nonatomic) NSMutableString *stringToAdd;
@property (nonatomic,strong) NSString *stringForDisplay;

- (double)performOperation:(NSString *)operation withArray:(NSMutableArray *)particularStackYouNeedToPopOff;
最后一行代码中的NSLog给了我
(null)


有什么想法吗?

也许我遗漏了什么,但是您的属性是在
CalculatorBrain
的类扩展中声明的,所以
CalculatorBrain.m
之外没有人知道这个属性


因此,如果要将此属性公开给其他对象,则必须在
CalculatorBrain.h
中声明它。

可能我遗漏了一些内容,但您的属性是在
CalculatorBrain
的类扩展中声明的,因此
CalculatorBrain.m
之外没有人知道此属性


因此,如果要将此属性公开给其他对象,您必须在
CalculatorBrain.h
中声明它。

哦-您对属性
的声明不会暴露给导入
CalculatorBrain.h
的其他类,因为您将属性声明放在
文件的
接口
扩展名中,哪些其他类将看不到


要使其可公开访问,请将
@属性
行移动到
CalculatorBrain.h
,不是
.m
文件。

哦-您对属性
的声明SincelastClear
不会向导入
CalculatorBrain.h
的其他类公开,因为您将属性声明放在
.m
文件的
接口
扩展中,其他类将看不到


要使其可公开访问,请将
@属性
行移动到
CalculatorBrain.h
,而不是
.m
文件。

我猜问题在于分配
stringForDisplay的方式,例如:

如果你使用类似

stringForDisplay_ = anotherString;
属性的setter不会启动,所以您必须自己保留变量,否则它将一直存在,直到您的方法完成

如果是,请使用属性设置器,例如:

self.stringForDisplay = anotherString;

这样ARC将完成所有内存管理。

我猜问题在于您分配
stringForDisplay的方式,例如:

如果你使用类似

stringForDisplay_ = anotherString;
属性的setter不会启动,所以您必须自己保留变量,否则它将一直存在,直到您的方法完成

如果是,请使用属性设置器,例如:

self.stringForDisplay = anotherString;

这样ARC将完成所有内存管理。

这实际上取决于在
performOperation:withArray:
方法中如何设置stringForDisplay

对于盲目猜测,请尝试使用

NSString *otherString = self.brain.stringForDisplay;
在这条线之后

double result = [self.brain performOperation:operation withArray:[self.brain whatHappenedSinceLastClear]];

这实际上取决于如何在
performOperation:withArray:
方法中设置stringForDisplay

对于盲目猜测,请尝试使用

NSString *otherString = self.brain.stringForDisplay;
在这条线之后

double result = [self.brain performOperation:operation withArray:[self.brain whatHappenedSinceLastClear]];

从技术上讲,你们应该用新的信息编辑你们以前的问题,若你们能:)哎呀——我不知道。现在我把事情搞砸了,有没有办法解决这个问题?我知道我在头文件中漏掉了一些弱/强的东西。那是因为我仍然不理解弱者和强者。也许这就是问题所在……您需要减少代码,只包含适当的位;有很多代码需要查看…我希望完成了。对此我很抱歉——我的错误是包含了太多的代码,因为我不想漏掉找出错误所在所必需的代码——但是我放错误的地方太多了,结果是代码太多了。我希望这样就可以了。从技术上讲,你们应该用新的信息编辑你们以前的问题,若你们能:)哎呀——我不知道。现在我把事情搞砸了,有没有办法解决这个问题?我知道我在头文件中漏掉了一些弱/强的东西。那是因为我仍然不理解弱者和强者。也许这就是问题所在……您需要减少代码,只包含适当的位;有很多代码需要查看…我希望完成了。对此我很抱歉——我的错误是包含了太多的代码,因为我不想漏掉找出错误所在所必需的代码——但是我放错误的地方太多了,结果是代码太多了。我希望这样就可以了。这样做和tGilani的建议一起解决了我的问题!有没有办法接受不止一个答案?不管怎样,谢谢你!这样做和tGilani的建议一起解决了我的问题!有没有办法接受不止一个答案?不管怎样,谢谢你!