Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSView没有';不显示更新_Objective C_Cocoa_Nsview - Fatal编程技术网

Objective c NSView没有';不显示更新

Objective c NSView没有';不显示更新,objective-c,cocoa,nsview,Objective C,Cocoa,Nsview,我正在尝试以编程方式更新视图。因此,我有一个控制器和一个视图。控制器应在按下按钮时更新视图。但是,尽管调用了这些方法,但视图并没有明显地更新 我发现NSView的对象ID与控制器保留的对象ID不同。(这是正确的术语吗?) 代码如下: // myView.h #import <Cocoa/Cocoa.h> @interface myView : NSView { int numberToDisplay; } -(void)seedNumber; -(int)nu

我正在尝试以编程方式更新视图。因此,我有一个控制器和一个视图。控制器应在按下按钮时更新视图。但是,尽管调用了这些方法,但视图并没有明显地更新

我发现
NSView
的对象ID与控制器保留的对象ID不同。(这是正确的术语吗?)

代码如下:

//  myView.h

#import <Cocoa/Cocoa.h>

@interface myView : NSView

{
    int numberToDisplay;

}



-(void)seedNumber;
-(int)numberToDisplay;

@end

--------------------------------------------------------

//  myView.m

#import "myView.h"

@implementation myView

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSLog(@"View loaded\n%@",self);
        numberToDisplay = 0;
    }
    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];
    NSLog(@"view is drawing");
    //Draw
    NSRect textRect = NSMakeRect(5, 5, 100, 100);
    NSMutableParagraphStyle* textStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy;
    textStyle.alignment = NSCenterTextAlignment;

    NSDictionary* textFontAttributes = @{NSFontAttributeName: [NSFont fontWithName: @"Helvetica" size: 50], NSForegroundColorAttributeName: NSColor.blackColor, NSParagraphStyleAttributeName: textStyle};

    [[NSString stringWithFormat:@"%d",numberToDisplay] drawInRect: NSOffsetRect(textRect, 0, 1) withAttributes: textFontAttributes];
}


-(void)seedNumber;
{
    numberToDisplay++;
    NSLog(@"view:%d",numberToDisplay);
}
-(int)numberToDisplay
{
    return numberToDisplay;
}
@end
--------------------------------------------------------

//  controller.h

#import <Foundation/Foundation.h>
@class myView;

@interface controller : NSObject

{
    myView *view;
}


-(IBAction)buttonPressed:(id)sender;
@end

--------------------------------------------------------
//  controller.m

#import "controller.h"
#import "myView.h"

@implementation controller

-(void)awakeFromNib
{

    view = [[myView alloc]init];
    NSLog(@"controller loaded\n%@",view);
}

-(IBAction)buttonPressed:(id)sender
{
    [view seedNumber];
    NSLog(@"controller: %d",[view numberToDisplay]);
    [view setNeedsDisplay:YES];
}
@end
--------------------------------------------------------
//myView.h
#进口
@接口myView:NSView
{
整数显示;
}
-(无效)种子数;
-(int)数字显示;
@结束
--------------------------------------------------------
//myView.m
#导入“myView.h”
@实现myView
-(id)initWithFrame:(NSRect)帧
{
self=[super initWithFrame:frame];
如果(自我){
NSLog(@“已加载视图\n%@”,self);
numberToDisplay=0;
}
回归自我;
}
-(void)drawRect:(NSRect)dirtyRect
{
[super-drawRect:dirtyRect];
NSLog(@“视图为图纸”);
//画
NSRect textRect=NSMakeRect(5,51000);
NSMutableParagraphStyle*textStyle=NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy;
textStyle.alignment=NSCenterTextAlignment;
NSDictionary*TextFontAttributeName=@{NSFontAttributeName:[NSFont fontWithName:@“Helvetica”大小:50],NSForegroundColorAttributeName:NSColor.blackColor,NSParagraphStyleAttributeName:textStyle};
[[NSString stringWithFormat:@“%d”,NumberDisplay]drawInRect:NSOffsetRect(textRect,0,1)withAttributes:textFontAttributes];
}
-(无效)种子数;
{
数字显示++;
NSLog(@“视图:%d”,数字显示);
}
-(int)数字显示
{
返回号码显示;
}
@结束
--------------------------------------------------------
//控制器.h
#进口
@类myView;
@接口控制器:NSObject
{
myView*视图;
}
-(iAction)按钮按下:(id)发送者;
@结束
--------------------------------------------------------
//控制器
#导入“controller.h”
#导入“myView.h”
@执行控制器
-(无效)从NIB中唤醒
{
视图=[[myView alloc]init];
NSLog(@“控制器已加载\n%@”,视图);
}
-(iAction)按钮按下:(id)发件人
{
[查看种子编号];
NSLog(@“控制器:%d”,[视图编号显示]);
[查看设置需要显示:是];
}
@结束
--------------------------------------------------------
这就是命令行返回的内容(当按下按钮时):

2014-05-26 11:58:20.036已加载图形测试[1230:303]视图
2014-05-26 11:58:20.049图形测试[1230:303]视图已加载
2014-05-26 11:58:20.049图形测试[1230:303]控制器已加载
2014-05-26 11:58:20.087图形测试[1230:303]视图正在绘制中
2014-05-26 11:58:22.083图形测试[1230:303]视图:1
2014-05-26 11:58:22.083图形测试[1230:303]控制器:1
2014-05-26 11:58:22.982图形测试[1230:303]视图:2
2014-05-26 11:58:22.983图形测试[1230:303]控制器:2
2014-05-26 11:58:23.432图形测试[1230:303]视图:3
2014-05-26 11:58:23.433图形测试[1230:303]控制器:3
2014-05-26 11:58:23.635图形测试[1230:303]视图:4
2014-05-26 11:58:23.636图形测试[1230:303]控制器:4
2014-05-26 11:58:23.849图形测试[1230:303]视图:5
2014-05-26 11:58:23.850图形测试[1230:303]控制器:5
。。。 所以它应该真的起作用了——我不知道为什么它不重画。
有人有主意吗?

哇!这件事你做得很艰难

如果显示的NSView没有与控制器实例保留的NSView实例相同的地址(您称之为对象ID),则您有两个NSView实例。一个视图正在显示,另一个未显示视图正在由控制器实例处理。这是因为在分配控制器时,您在awakeFromNib期间分配了另一个myView实例:。此实例与nib中显示的myView实例不同。如果您想这样做,那么将controler视图声明为IBOutlet并将其连接到nib中(然后完全删除awakeFromNib方法)

另外:您可以完全丢弃控制器实例并将-buttonPressed:移动到myView,然后像以前一样将nib文件中的操作连接到第一响应者


另外:您可以使用NSTextField的实例来显示数字,并在-buttonPressed:中设置NSTextField(self)的intValue属性,这将导致值自动显示为文本。您可以在界面生成器中设置字体等。

谢谢您的回答-您是对的,我可以将其放在视图中,也可以使用我更改的文本字段-但我的问题是,我必须将数据传递到NSView,但它不起作用-这是主要问题。如果我没有在awakeFromNib上分配视图,我将不会获得任何传递到视图的数据。请编辑而不是重新发布。
2014-05-26 11:58:20.036 graphikTest[1230:303] View loaded
<myView: 0x60000012e7e0>
2014-05-26 11:58:20.049 graphikTest[1230:303] View loaded
<myView: 0x60800012f140>
2014-05-26 11:58:20.049 graphikTest[1230:303] controller loaded
<myView: 0x60800012f140>
2014-05-26 11:58:20.087 graphikTest[1230:303] view is drawing
2014-05-26 11:58:22.083 graphikTest[1230:303] view:1
2014-05-26 11:58:22.083 graphikTest[1230:303] controller: 1
2014-05-26 11:58:22.982 graphikTest[1230:303] view:2
2014-05-26 11:58:22.983 graphikTest[1230:303] controller: 2
2014-05-26 11:58:23.432 graphikTest[1230:303] view:3
2014-05-26 11:58:23.433 graphikTest[1230:303] controller: 3
2014-05-26 11:58:23.635 graphikTest[1230:303] view:4
2014-05-26 11:58:23.636 graphikTest[1230:303] controller: 4
2014-05-26 11:58:23.849 graphikTest[1230:303] view:5
2014-05-26 11:58:23.850 graphikTest[1230:303] controller: 5