为什么objective-c对象在收到消息后不刷新?

为什么objective-c对象在收到消息后不刷新?,objective-c,refresh,message,Objective C,Refresh,Message,A有一个NSView对象,在我按下打开的子菜单中的菜单栏后,它会收到一条消息。它从文本文件加载交换数据,并在CustomView中呈现。那么 -(IBAction)loadExchangeData:(id)sender 加载数据并存储在NSMutableArray*中,然后由drawRect呈现 但是!在drawRect函数中,加载的数据消失之前,NSMutableArray*将再次显示0X0 以及部分守则: .h: 根据您的解释,看起来您引用了不同的对象,您对NSMutableArray的

A有一个
NSView
对象,在我按下打开的子菜单中的菜单栏后,它会收到一条消息。它从文本文件加载交换数据,并在
CustomView
中呈现。那么

-(IBAction)loadExchangeData:(id)sender 
加载数据并存储在
NSMutableArray*
中,然后由drawRect呈现

但是!在
drawRect
函数中,加载的数据消失之前,
NSMutableArray*
将再次显示0X0

以及部分守则:

.h:


根据您的解释,看起来您引用了不同的对象,您对NSMutableArray的设置位于一个对象中,而drarect则引用了不同的对象

调试代码以了解保存NSMutableArray的对象地址,这可以帮助您缩小问题范围

如需进一步帮助,请添加部分代码以了解更多信息

根据代码和注释进行更新


您可能在nib中有一个对象,在代码中创建了一个对象,在这种情况下,请避免在代码中创建对象,并使用outlet(IBOutlet)在代码中引用在nib中创建的对象。

从loadExchangeData发布代码:这样我们就可以看到可能的原因。感谢代码-您是否验证了您没有使用两个不同的图表对象,如果向一个对象添加数据并尝试从另一个对象访问数据,通常会出现这种问题。在执行loadExchangeData和drawRect时检查图表对象的地址。您可以在这两个函数中保留制动点,并在调用堆栈中验证对象地址。我检查了,是的,这就是问题所在。他们有不同的地址。这是怎么发生的?在MainMenu.nib窗口的Interface Builder中,我有一个对象实例。这可能是问题所在?界面生成器是否使自己的对象独立于原始对象?但无论如何,我应该指出子菜单和消息之间的连接。
 #import <Cocoa/Cocoa.h>
 @interface Chart : NSView 
 {
     NSMutableArray * exchange;
 }
 - (IBAction)loadExchangeData:(id)sender;
 @end
#import "Chart.h"
@implementation Chart
- (IBAction)loadExchangeData:(id)sender {
     ...
     exchange = [NSMutableArray array];
     [exchange addObject:...];
     ...
     return self;
}

- (void)drawRect:(NSRect)dirtyRect 
{
    ...
    id sth = [exchange objectAtIndex:i];
    ...
}
@end